Está en la página 1de 736

Guía del usuario

Menfis para Microsoft Windows 1993-2009 Professional Sofware, S.A.

TODOS LOS DERECHOS RESERVADOS

Distribución, desarrollo y soporte:

María Tubau, 4 3º - 28050 Madrid


Tel.: 91 358 75 80 Fax: 91 358 95 60

Castillejos, 226 - 08013 Barcelona


Tel.: 93 439 82 22 Fax: 93 439 95 26

Fernando Pérez de Traba, 13 - 15670 Culleredo (A Coruña)


Tel. y Fax: 981 91 30 44

Información comercial: 902 358 888


Web: www.prosoft.es
Mail: menfis@prosoft.es

La información contenida en este documento podría cambiar sin


previo aviso.

Este documento no puede ser reproducido ni transmitido, ni total


ni parcialmente, por ningún medio y para ningún propósito, sin la
autorización expresa de los propietarios del copywright.

Los nombres de los productos mencionados en este documento,


han sido utilizados con el único propósito de su identificación y
pueden ser marcas comerciales de sus respectivas compañías.

Primera Edición. octubre 2010.


Índice

Introducción al programa

...............................................................................................................................
¿En qué consiste Menfis? 1
B.D. relacional y...............................................................................................................................
Orientada a objetos 3
Convenciones de...............................................................................................................................
nomenclatura y tipografía 5
............................................................................................................................... 9
Terminología básica
Guía rápida de ...............................................................................................................................
usuario 11
..............................................................................................................................
Lección 1: Consultar un ejemplo 11
..............................................................................................................................
Lección 2: Realizar un presupuesto sencillo desde cero 22
..............................................................................................................................
Lección 3: Manejar mediciones desglosadas 27
..............................................................................................................................
Lección 4: Las certificaciones (Fases de obra) 33
..............................................................................................................................
Lección 5: Personalizar y programar informes 34
Lección 5b:..............................................................................................................................
Personalizar y programar informes (2) 39
..............................................................................................................................
Uso práctico del teclado 40

Ventanas del programa

............................................................................................................................... 43
Controles habituales
............................................................................................................................... 47
La ventana principal
La Ventana..............................................................................................................................
Principal 47
..............................................................................................................................
Menús y barra de iconos 49
Información..............................................................................................................................
de Fase, ámbito y modo 52
..............................................................................................................................
Búsqueda rápida y padre actual 54
Información..............................................................................................................................
del concepto padre 55
Botones de..............................................................................................................................
cabecera de la lista 55
..............................................................................................................................
Panel de búsqueda en árbol 59
.............................................................................................................................. 61
Lista de conceptos
Campos de..............................................................................................................................
edición 65
..............................................................................................................................
Barra de botones al pie 67
Menú Archivo ............................................................................................................................... 69
.............................................................................................................................. 69
Menú Archivo
..............................................................................................................................
Diálogo Abre archivo 70
..............................................................................................................................
Diálogo Nuevo archivo 71
..............................................................................................................................
Diálogo Guardar como 72
..............................................................................................................................
Diálogo Guardar como archivo comprimido (MEZ)... 73
Administrar..............................................................................................................................
lista de origen de datos 74
..............................................................................................................................
Enviar archivo por correo electrónico ... 75
Menú Concepto............................................................................................................................... 77
.............................................................................................................................. 77
Menú Concepto
.............................................................................................................................. 85
Ventana Deshace
.............................................................................................................................. 87
Ventana Textos
.............................................................................................................................. 88
Ventana Pliegos
.............................................................................................................................. 90
Ventana Valores
.............................................................................................................................. 93
Ventana Términos
.............................................................................................................................. 96
Ventana Gráficos
.............................................................................................................................. 106
Ventana Paramétricos
.............................................................................................................................. 115
Ventana Mediciones
.............................................................................................................................. 120
Ventana Certificaciones
..............................................................................................................................
Ventana Ajusta precio 121
Ventanas ..............................................................................................................................
de Propiedades 122
......................................................................................................................................
Ventanas Propiedades, características comunes 122

...................................................................................................................................... 128
Ventana Propiedades: Capítulo
...................................................................................................................................... 134
Ventana Propiedades: Elemento
...................................................................................................................................... 137
Ventana Propiedades: Referencia
...................................................................................................................................... 139
Ventana Propiedades: Entidad
......................................................................................................................................
Ventana Propiedades: Centro de coste 142

...................................................................................................................................... 146
Ventana Propiedades: Recurso
...................................................................................................................................... 151
Ventana Propiedades: Contrato
...................................................................................................................................... 155
Ventana Propiedades: Documento
...................................................................................................................................... 159
Ventana Propiedades: Banco
...................................................................................................................................... 161
Ventana Propiedades: Persona
...................................................................................................................................... 162
Ventana Propiedades: Equipo

Ventana Propiedades: Turno...................................................................................................................................... 164

Ventana Propiedades: Tarea...................................................................................................................................... 166


............................................................................................................................... 171
Menú Proyecto
.............................................................................................................................. 171
Menú Proyecto
..............................................................................................................................
Ventana Información del proyecto 173
..............................................................................................................................
Ventana Parámetros generales 175
.............................................................................................................................. 184
Ventana Monedas
Imprimir .............................................................................................................................. 185
...................................................................................................................................... 185
Ventana Informes y procedimientos

Ventana informes favoritos ...................................................................................................................................... 190


...................................................................................................................................... 191
Ventana Configuración impresora
Ventana Vista preliminar ...................................................................................................................................... 193

...................................................................................................................................... 195
Diálogo Informe por impresora
...................................................................................................................................... 196
Ventana Programa JavaScript
...................................................................................................................................... 198
Ventana Parámetros del programa
..............................................................................................................................
Ventana Configuración global de parametricos 200
.............................................................................................................................. 201
Ventana Fases
.............................................................................................................................. 204
Ventana Ámbitos
..............................................................................................................................
Ventana Planifica Tareas 206
..............................................................................................................................
Ventana Ajusta presupuesto 211
..............................................................................................................................
Ventana Hoja final 213
Búsqueda..............................................................................................................................
de información 216
Ventana Búsqueda General ...................................................................................................................................... 216
...................................................................................................................................... 218
Ventana Búsqueda por Términos
......................................................................................................................................
Ventana Búsqueda en Lenguaje natural. Tesauro 219

......................................................................................................................................
Otras formas: Panel de Búsqueda en árbol 223

...................................................................................................................................... 225
Otras formas: Búsquedas QBE
......................................................................................................................................
Otras formas: Búsquedas por Tipo y Clase 231

......................................................................................................................................
Otras formas: Búsquedas por Clasificaciones 232

.............................................................................................................................. 235
Ventana Características
............................................................................................................................... 237
Menú Herramientas
.............................................................................................................................. 237
Menú Herramientas
..............................................................................................................................
Ventana Central de proyectos 241
..............................................................................................................................
Ventana Conexión ERP 243
..............................................................................................................................
Ventana Modos traslada 246
..............................................................................................................................
Diálogo repara B.D. 250
Submenús..............................................................................................................................
de Exportacion e Importación 251
Exporta FIEBDC-3... ...................................................................................................................................... 251

Exporta BCZ ...................................................................................................................................... 252

Importa FIEBDC-3... ...................................................................................................................................... 253

Importa BCZ ...................................................................................................................................... 257

......................................................................................................................................
Importa mediciones AllPlan FT v16 258

..............................................................................................................................
Personalización de la barra de herramientas 261
.............................................................................................................................. 262
Ventana Utilidades
.............................................................................................................................. 265
Ventana Opciones
............................................................................................................................... 279
Menú Marcadores
.............................................................................................................................. 279
Menú Marcadores
............................................................................................................................... 281
Menú Ventanas
.............................................................................................................................. 281
Menú Ventanas
Menú Ayuda ............................................................................................................................... 285
.............................................................................................................................. 285
Menú Ayuda
............................................................................................................................... 287
Diálogos de importancia
.............................................................................................................................. 287
La Calculadora
..............................................................................................................................
Diálogo selección de conceptos 292
..............................................................................................................................
Diálogo selección de informes 292
..............................................................................................................................
Diálogo Borrar concepto 294
..............................................................................................................................
Diálogo Cambio de icono 295
..............................................................................................................................
Diálogo Cambio de tipo 297
..............................................................................................................................
Diálogo Nuevo Concepto 297
..............................................................................................................................
Diálogo Selector de campos 299
..............................................................................................................................
Ventana del actualizador 300

Anexo 1: SQL

Introducción al...............................................................................................................................
lenguaje SQL 303

Anexo 2: JavaScript

...............................................................................................................................
Guía de referencia de lenguaje JavaScript 319
...............................................................................................................................
Extensión COM: Introducción 355
...............................................................................................................................
Extensión COM: Objetos y métodos básicos 357
...............................................................................................................................
Extensión COM: Objetos y métodos para acceso a datos 369
...............................................................................................................................
Extensión COM de JScript para datos de presupuestos 383
...............................................................................................................................
Extensión COM de JScript para programar informes 387
...............................................................................................................................
Extensión COM: Ejemplos 395
...............................................................................................................................
Preguntas frecuentes sobre programación JScript 397
...............................................................................................................................
Conexión ingra.xjs para automatizar la aplicación 399

Anexo 3: FIEBDC, Formato de Intercambio Estándar

Introducción al...............................................................................................................................
FIEBDC 401
Observaciones...............................................................................................................................
para editores de Bases de Datos 405
Especificación...............................................................................................................................
FIEBDC-3/2007 409
..............................................................................................................................
Especificación completa 409
Especificación...............................................................................................................................
FIEBDC-3/2004 479
..............................................................................................................................
Especificación completa 479
Especificación...............................................................................................................................
FIEBDC-3/2002 547
..............................................................................................................................
Especificación completa (desde 1/1/02) 547
Especificación...............................................................................................................................
FIEBDC-3/98 609
.............................................................................................................................. 609
Generalidades
Resumen..............................................................................................................................
de tipos de registros 622
..............................................................................................................................
Procedimiento de lectura de descomposiciones paramétricas 623
..............................................................................................................................
API estándar FIEBDC-3/98 para descr. param. compiladas en DLL 630
..............................................................................................................................
Especificación de las funciones del API 637
Ejemplos ..............................................................................................................................
de la compilación de paramétricos 648
..............................................................................................................................
Cambios FIE98 respecto a FIEBDC-3/95 678
Especificación...............................................................................................................................
FIEBDC-3/95 679
.............................................................................................................................. 679
Generalidades
Resumen..............................................................................................................................
de tipos de registros 689
..............................................................................................................................
Procedimiento de lectura de descomposiciones paramétricas 690
Especificación...............................................................................................................................
FIE 1.01 699
.............................................................................................................................. 699
Generalidades

Otros Anexos

...............................................................................................................................
Conceptos avanzados de mediciones y presupuestos 703
............................................................................................................................... 709
Preguntas frecuentes
Versiones ............................................................................................................................... 715
............................................................................................................................... 717
Instalación y configuración
..............................................................................................................................
Administradores: Detalles de instalación 717
Instalación..............................................................................................................................
y solución de problemas 720
..............................................................................................................................
Tipos de archivos que maneja el programa 724

Professional Software S.A.

La empresa ............................................................................................................................... 727


¿En qué consiste Menfis?
Menfis es una aplicación para realizar presupuestos, mediciones y control de obra en el
sector de la construcción. Ahora, al "Menfis de siempre" se le ha añadido la potencia de
gestionar todo el seguimiento de obra, de diversas formas y con distintos grados de
detalle.

Como primera idea general, diremos que una base de datos para nosotros, será un
conjunto de conceptos de varios tipos posibles, tanto básicos o muy generales (Carpetas,
Varios, Documentos, Referencias a archivos...) como más detallados y particulares para
el propósito de medir, comprar material y realizar presupuestos (Partida, Especialidad,
Maquinaria, Materiales, Subcontratas, Equipos, Entidades, y otros muchos...). También
puede haber conceptos sin tipo.

Cada concepto es una unidad de información que contiene varios campos (como un
registro de una base de datos cualquiera, o una línea de una hoja de cálculo de Ms-
Excel, por ejemplo) y distintos grupos de información relacionada, dependiendo de su
tipo.

Debido a la generalidad de utilización del programa, en esta ayuda en línea no hay


ejemplos concretos de ninguna implementación de base de datos particular, ya que lo
que nos interesa documentar son los fundamentos básicos de la propia estructura y
gestión, y no de la utilización final con unos datos; esta es labor de la guía de usuario
que puede encontrar en el CD-ROM.

IM PORTANTE: Se debe destacar que la estructura de Menfis es dinámica y el usuario


puede ampliarla en campos de tablas, informes particulares e incluso herramientas y
opciones de menú.

Requerimientos Software
La aplicación está desarrollada para sistemas operativos Microsoft® Windows de 32 y
64 bits, lo que comprende Windows XP, Vista y Windows 7. Trabaja aprovechando las
características del sistema, pero también incluye muchas facilidades de manejo
especialmente diseñadas para las tareas específicas que se han de realizar con él,
resultando con ello muy fácil de manejar.

¿En qué consiste Menfis? / 1


El programa dispone de un sistema de ayuda sensible al contexto (un botón rotulado
Ayuda que encontrará en cualquier diálogo o ventana de la aplicación), que incluye la
información impresa sobre el programa y amplía la información de referencia, de
forma que podrá solucionar cualquier duda.

Requerimientos Hardware
La configuración mínima necesaria para utilizar esta versión de la aplicación, es la
del sistema operativo sobre el que esté instalado. Se recomienda por comodidad,
tener una tarjeta gráfica y monitor en color SVGA con resolución de 1.024x768,
aunque puede funcionar a partir de 640x480.

Introducción al programa / 2
B.D. relacional y Orientada a objetos
La aplicación maneja y gestiona una base de datos en parte relacional y en parte
orientada a objetos; veamos qué significa cada una de esas características y cómo se
aplican a los datos que manejamos.

Los datos (Modelo relacional)


Todos los datos con los que vamos a trabajar se estructuran en tablas y campos
cumpliendo las reglas del modelo relacional, esto nos permite realizar consultas con
el lenguaje universal de interrogación de bases de datos —SQL—, utilizar cualquier
sistema gestor de bases de datos —por defecto la aplicación instala y utiliza Microsoft
Jet—, y nos permite acceder y trasladar nuestra información a otros sistemas y
desde otras aplicaciones.

Conceptos y relaciones (Modelo entidad-relación)


Organizamos la información en conceptos de distinto tipo, un concepto es un ente de
información, con un código único e información asociada. Los conceptos se
relacionan entre sí mediante relaciones jerárquicas (ascendiente-descendiente) que
nos permiten organizar árboles (más bien redes) donde colocar nuestros conceptos.
Un único concepto puede estar situado en múltiples ramas, esto nos permite
organizar la información por diferentes criterios y encontrar lo que busquemos por
cualquiera de ellos sin mas que navegar a través de la estructura.

Lo descrito define un modelo entidad-relación que permite la creación de una red de


relaciones entre conceptos.

El panel de búsqueda en árbol que podemos mostrar a voluntad en la ventana


Principal, nos permite visualizar esta red de relaciones de manera semejante al
explorador de Windows.

Conceptos y propiedades (Modelo orientado a objetos)


Todos los conceptos comparten unos pocos campos, todos tienen código, descripción,
tipo, etc. Según el tipo los conceptos tienen muchos otros campos, distintos para cada

B.D. relacional y Orientada a objetos / 3


tipo. El que todos tengan una parte común nos permite crear herramientas genéricas
para conceptos, independientes del tipo. La aplicación incorpora una gran cantidad de
herramientas que trabajan con cualquier tipo de concepto.

Esta descripción muestra lo que se conoce como modelo orientado a objetos, y nos ha
permitido la creación de esta plataforma que incluye numerosas herramientas para
trabajar con conceptos genéricos y permiten personalizar el programa en
muchísimos aspectos.

Toda la estructura se basa en estas tablas o conjuntos de datos:

-Conceptos

-Auxiliares

-Relaciones Concepto - Concepto

-Relaciones Concepto - Auxiliar

-Relaciones especiales Propiedad - Concepto

- ...

Introducción al programa / 4
Convenciones de nomenclatura y tipografía
Nomenclatura para uso del ratón
En adelante, nos referiremos a las diferentes acciones que se pueden realizar con el
ratón utilizando los siguientes términos:

Hacer clic / pinchar


Pulsar y soltar el botón izquierdo del ratón sobre algún elemento

Hacer doble clic


Pulsar y soltar dos veces rápidamente el botón izquierdo (la velocidad necesaria para
que Windows identifique la acción como doble clic se puede modificar en el icono
"Mouse" del Panel de Control de Windows)

Arrastrar
Pulsar el botón izquierdo, desplazar el puntero del ratón sin soltar el botón, y soltar el
botón en el lugar de destino

Seleccionar
Haciendo clic sobre un elemento, queda seleccionado —si hubiera otros elementos
seleccionados, se excluyen de la selección—. Si se hace clic arrastrando, todos los
elementos por los que se pase, quedan seleccionados

Multiseleccionar
Para seleccionar elementos contiguos, seleccionar el primer elemento y el último,
manteniendo pulsada la tecla MAYÚSCULAS. Si en la selección resultante pulsamos
CONTROL sobre un elemento que estaba seleccionado, se excluye, y viceversa

El algunos procesos del programa —por ejemplo, trasladar conceptos entre archivos,
o mover elementos de una lista—, el orden en que se seleccionen los elementos
puede ser relevante.

En algunas funciones del programa se utiliza el botón derecho; cuando sea

Convenciones de nomenclatura y tipografía / 5


necesario, se indicará explícitamente. Por otra parte, recuerde que el Panel de
Control de Windows también le permite intercambiar la funcionalidad de los botones
izquierdo y derecho.

Nomenclatura para los controles


Utilizaremos los siguientes términos para referirnos a los controles y elementos de
Windows:

Botón
Rectángulo gris en relieve con un rótulo y generalmente con un dibujo sobre él

Conmutador
Pequeño cuadrado blanco que puede estar vacío (desactivado) o contener una marca
azul de aceptación (activado); va acompañado de un rótulo que lo identifica. También
puede ser un botón que se queda pulsado y con el fondo de un color más claro, en
este caso estaría activado.

Selector
Conjunto de círculos con un rótulo, de los cuales sólo uno aparece relleno de azul,
indicando, entre un grupo de opciones excluyentes posibles, la que está
seleccionada

Campo de texto
Rectángulo para introducir texto en su interior; se utiliza en todos los campos de
entrada, y puede ser monolínea o multilínea

Lista desplegable
Cuadro de texto que solo admite determinados datos. Haciendo clic sobre él, se
despliega la lista de posibles valores.

Campo
Cuadro de texto o lista desplegable que puede tener distintos comportamientos que
un cuadro de texto normal. (ayudas al teclear, funciones especiales, etc.)

Convenciones Tipográficas
Color azul
Los nombres de botones, opciones de menú y rótulos de secciones de la ventana, se
indican con este color, para localizarlos fácilmente entre el texto

-Letra de paso fijo-


Se utiliza para referirse a textos literales que aparecen en pantalla; también se
utiliza, en los ejemplos, para indicar texto que se ha de teclear literalmente

Negrita
Se utiliza para referirse a nombres de ventanas, informes...

Cursiva
Se utiliza para indicar texto variable que el usuario o el programa sustituyen por
algún valor concreto

Introducción al programa / 6
[Texto entre corchetes]
En algunos lugares de la ayuda se utilizan corchetes para indicar —en instrucciones
o comandos del sistema— fragmentos de texto cuya inclusión es opcional

Subrayado
Se utiliza para referirse a programas del sistema operativo y para resaltar notas de
importancia

>
Separador de una secuencia de opciones. Se utiliza para describir la navegación por
las opciones de menús, ventanas y selección de botones, por ejemplo

Subrayado color
En color verde, y algunas veces azul, son saltos de hipertexto que nos permiten ir de
unas referencias a otras, dentro de la ayuda

Las mayúsculas se utilizan ocasionalmente como formato de siglas, iniciales o


acrónimos, la cursiva para alguna palabra en otro idioma o el nombre de algún
documento citado en el texto. En todos estos casos su significado se deduce
fácilmente del contexto.

Convenciones de nomenclatura y tipografía / 7


Terminología básica
A lo largo, no sólo de toda la ayuda en línea, sino también de la guía de usuario y del
propio programa, se hace continuamente referencia a ciertos términos básicos:

Concepto
Es la unidad central y básica de información de nuestras bases de datos. Cada
concepto es una de las líneas que aparece en la ventana principal (aparecen también
en otras ventanas de propiedades, de búsqueda, etc.), y aparte de la información que
ahí se muestra (los campos Código, Descripción, y otros cualesquiera), tienen
relacionada otra información según su Tipo. Así, trabajando con cualquier concepto,
podríamos asociar un gráfico o bien uno o varios textos...

Relación
Un conjunto de conceptos, y la unión entre ellos (relaciones) son lo que conforman el
árbol de conceptos de la base de datos. Los conceptos también pueden estar "sueltos"
o "descolgados" en la base, en este caso no forman parte del árbol.

De las relaciones depende información muy importante en la obra como por ejemplo,
las mediciones desglosadas de los conceptos de tipo elemento y unidad de obra, y los
rendimientos de los recursos que intervienen en estos elementos.

Descomposición
Con la jerarquía que se establece entre conceptos a través de sus relaciones, se
entiende por descomposición o descendientes de un concepto, la lista de conceptos
que están a nivel inferior (los que "cuelgan" o mantienen una relación por debajo de
él).

Árbol de conceptos (árbol jerárquico)


Cualquier base de datos u obra está compuesta de conceptos, que están organizados
en un árbol de conceptos (éste árbol es más bien una red, ya que los conceptos no sólo
tienen un "padre" y uno o varios "hijos", sino que pueden tener varios padres, pero
para simplificar, siempre le llamaremos árbol). Puede ver en qué consiste la

T erminología básica / 9
organización jerárquica en el panel de Búsqueda en árbol de la ventana principal.

Hay que destacar, que el árbol puede tener varios niveles de profundidad, o no. El caso
límite sería una base de datos con un nivel de carpetas de búsqueda —ver más abajo
—, y todos los conceptos descolgados del árbol, "sueltos" en la base de datos, pero
accesibles mediante esas búsquedas.

Concepto raíz
Se trata del concepto del que "cuelgan" todos los demás que estén ordenados
jerárquicamente en el árbol de conceptos. Su código es un punto (.) y no tiene
ascendiente (su nivel en el árbol es el cero).

Padre e hijo (o ascendiente y descendiente)


Con el término padre o ascendiente indistintamente, designamos a los conceptos que
están a un nivel superior al concepto que consideramos, pero relacionados con él.
Éste concepto a su vez, será hijo de cualquiera de esos.

Búsqueda o Carpeta de búsqueda


Es un caso especial de carpeta en la que las relaciones inferiores son sustituidas por
el resultado de una búsqueda en lenguaje SQL, con unos determinados criterios. Sin
cambiar la sentencia de búsqueda, si cambiamos los conceptos y/o relaciones del
archivo, pueden cambiar su lista de hijos "virtuales", ya que no están relacionados
con esa carpeta "colgando" debajo de ella.

Introducción al programa / 10
Guía rápida de usuario
Lección 1: Consultar un ejemplo
Este tutorial o guía paso a paso en varios capítulos está basado en el manual, que se
distribuye en el CD-ROM en un archivo .PDF. La ventaja de éste, es que tiene
referencias a los temas de la propia ayuda en línea, que siempre la tiene disponible con
el programa, y que es más concisa y con ejemplos prácticos más ágiles (es
recomendable que utilice un archivo de muestra como ejemplo.men que se encuentra
en el directorio \EJEMPLOS).

Información de una obra real


Abrimos un archivo si la ventana está vacía, aunque lo normal es que siempre haya
uno abierto.

Un archivo con extensión .men puede contener cada uno de los siguientes tipos de
datos: un proyecto de obra (incluyendo presupuesto y certificaciones), una base de
datos de la construcción que haya adquirido de algún organismo desarrollador, una
oferta para licitación de precios, un proyecto y una serie de fases de ejecución para
controlar el seguimiento de una obra...

Al abrir un archivo de Menfis (extensión .men), puede encontrarse con una base de
datos que contenga miles de especificaciones y precios pero ninguna medición; o
bien, un proyecto de obra donde habrá capítulos y partidas con sus mediciones.
Aunque sean de distinta naturaleza, los datos se consultan y editan de la misma
forma.

Consideremos este fragmento de un proyecto de obra:

1. Demolición

1.1 Demolición Tejado

1.1.1 Oficial segunda

1.1.2 Peón ordinario

Guía rápida de usuario / 11


1.1.3 Costes indirectos

1.2 Demolición Muro

1.2.1 Peón especializado

1.2.2 Peón ordinario

1.2.3 Compresor 4m3/min.

1.2.4 Medios Auxiliares

1.2.3 Costes indirectos

1.3 Limpieza / Relleno Arena

1.3.1 …

2 Estructuras

2.1 Hormigón para armar H-175

2.1.1 Oficial 1ª

2.1.2 Ayudante encofrador

2.1.3 Grúa pluma

2.1.4 Hormigón H-175

2.1.4.1 Peón ordinario

2.1.4.2 Cemento

2.1.4.3 Arena

2.1.5 Medios Auxiliares

2.1.6 Costes indirectos

3 Movimiento de Tierras

...

y veamos como se representa la realidad de esta obra en un archivo de presupuesto...

Representación en Menfis: Cantidades y rendimientos


El proyecto se divide en capítulos (Demolición, Estructuras, etc.), que en nuestro
archivo se representan mediante conceptos de Tipo carpeta. Cada capítulo está
descompuesto en partidas o actividades (Demolición Tejado, Demolición Muro,
Partida alzada de construcción, etc.), que se representan mediante conceptos de tipo
genérico Elemento. Cada partida puede estar descompuesta en:

Medios auxiliares

Introducción al programa / 12
Precios auxiliares, que tienen a su vez descomposición (como la fábrica de
hormigón)

Recursos (precios simples), que no tienen descomposición (Oficial, Peón


ordinario, Cemento, etc.). Identificaremos varias clases de conceptos con el
Tipo Recurso y todos serán simples.

IM PORTANTE: Se llama concepto a cada unidad de información del archivo, bien sea
capítulo, partida, auxiliar, o simple. Una partida de obra interviene en el capítulo en
una cantidad determinada que se llama medición. Un auxiliar o un simple
interviene en la partida en una cantidad que se llama rendimiento. Para más
información -> consultar la terminología básica.

Puede utilizar el panel de búsqueda en árbol para ver en el archivo de ejemplo los
cuatro niveles (capítulo, partida, auxiliar y simple con las cantidades de este último).
Calculando de abajo a arriba en el presupuesto:

1. Un concepto puede formar parte de más de una descomposición (por ejemplo el


concepto Peón ordinario). El importe de un concepto sin descomposición
(simple), se establece directamente como el precio por unidad de medida, por
ejemplo 19,65 Euros/hora para un Peón ordinario; el precio de un concepto
con descomposición (capítulo, sub-capítulo, partida descompuesta o auxiliar),
se calculará sumando los importes de todos sus descompuestos.

2. El coste de una partida está definido como su precio más los costes indirectos
y redondeado al número de decimales que se establezca en cada caso en
función de la moneda utilizada y los decimales expresados en Parámetros
generales. Los costes indirectos se especifican como un porcentaje que se
aplica a todas las partidas del archivo.

3. El presupuesto de cada capítulo se calcula como sumatorio del coste de las


partidas que lo componen, y por último, se calcula el presupuesto total de la
obra como la suma de los presupuestos de sus sub-capítulos.

Como cantidades totales de concepto, por ejemplo, un simple "Oficial segunda" en


una partida "Demolición Tejado" será la medición de la partida, por el rendimiento de
ese simple dentro de ella. Si sumamos las cantidades requeridas de Oficial segunda
en todas las partidas de la obra, dará la cantidad total del concepto Oficial segunda.

Códigos y jerarquía de conceptos


La información contenida en el archivo Menfis suele estar relacionada (pertenecer) a
algún concepto, aunque podamos tener gráficos y otras informaciones que no lo
estén. La unidad central de información es el concepto. Cada concepto se identifica
con un código único para cada Tipo (distintos tipos de conceptos pueden tener el
mismo código).

Los códigos de un archivo se organizan en una estructura jerárquica. Existiendo


siempre un concepto raíz del archivo (con el código punto "."), del que colgará la
estructura con todos los demás niveles de conceptos. Por ejemplo, en un proyecto de
obra, en un primer nivel van los códigos de los capítulos de la obra, de cada uno de
éstos colgarán los códigos de sus partidas con sus mediciones, y de cada una de éstas
los códigos de auxiliares, materiales, maquinaria y mano de obra que formen su

Guía rápida de usuario / 13


descomposición (si la tienen).

De los capítulos (representados por conceptos de Tipo carpeta) pueden colgar partidas
u otros capítulos de los que a su vez cuelguen partidas; no hay límite en el número de
niveles de la estructura organizativa del archivo.

La jerarquía es comparable a un árbol genealógico donde los conceptos que cuelgan


de un determinado concepto son hijos de éste, mientras que ese concepto es su
padre. Los conceptos que tienen un mismo padre son hermanos; con la particularidad
de que cualquier concepto puede formar parte de la descomposición de múltiples
partidas, es decir puede tener múltiples padres. Pudiendo también existir en el
archivo conceptos que no forman parte de ninguna descomposición, esto es,
huérfanos.

El sentido de esta estructura es poder organizar la información según diferentes


criterios. Por ejemplo, la descomposición de una partida agrupa códigos de auxiliares
y simples para conseguir un precio descompuesto; los capítulos pueden estar
agrupados por oficios para tener presupuestos parciales de interés.

Las partidas de la obra pueden representarse con una Clase especial de concepto,
dentro del Tipo Varios, así como los precios simples pueden representarse mediante
el Tipo Recurso, y además con distintas Clases (Material, Maquinaria, Mano de obra,
Subcontrata...) Pero no se asuste: para un proyecto y certificaciones normales, no es
necesario manejar muchos tipos de conceptos (se utilizan cuando queremos hacer
alguna clase de seguimiento económico o control de obra). Todo esto se verá en
detalle más adelante.

Información del propio concepto y entre conceptos


Cada concepto tiene unos datos directamente asociados -como su resumen
descriptivo, unidad de medida, fecha de modificación del concepto, etc.-

Cuando colgamos un concepto de otro, no sólo se coloca allí, también estamos


relacionándolo con aquél mediante una cantidad. A esta cantidad, si está entre una
partida y un precio auxiliar o simple de una partida, se la llama rendimiento, y si
está entre un capítulo y una partida se la llama medición.

IM PORTANTE: Hay que distinguir entre información asociada sólo al concepto y la


asociada a la relación entre conceptos: Código, Resumen y Precio es información que
pertenece a cada concepto individual, en cambio la Cantidad (medición) pertenece a
la relación entre dos conceptos. La prueba está en el siguiente ejemplo: una partida
(con el mismo código) puede intervenir en más de un capítulo (en su descomposición)
con distintas mediciones en cada uno, pero si cambiamos el Resumen, cambiará en
todos los sitios de la obra donde intervenga la partida.

El Precio es único para cada concepto, pero SÓLO EN LA MISMA FASE, esto quiere
decir que cada concepto puede tener varios precios a lo largo de todas las fases del
proyecto, como puede tener varios precios en la misma fase, pero en DISTINTOS
ÁMBITOS DE precios: En el mismo ámbito y la misma fase un concepto sólo puede
tener un Precio igual que sólo tiene un Código.

En cambio, otros datos pertenecientes a la relación, como las mediciones, son: las
mediciones desglosadas, el factor que afecta a las mediciones, la marca de actividad

Introducción al programa / 14
finalizada...

Información asociada a los conceptos


Los conceptos pueden además tener otra información asociada, además de su precio,
y medición (cantidad): textos descriptivos extensos, o pliegos de condiciones,
términos clave para búsquedas documentales, mediciones desglosadas, gráficos, etc.
existiendo además una ventana particular para cada tipo de concepto, que permite
asociar información muy particular de ese tipo. Todo ello se guarda en un único
archivo que incluye toda la información que utiliza su proyecto.

Abra la ventana de textos. Podemos colocar cualquier ventana con el tamaño y


posición que más cómodo resulte. La opción Modo recuerda del menú Ventanas
permitirá que se mantengan cuando vuelva a abrir el programa.

Todas las ventanas de información adyacente al concepto, se mantendrán


sincronizadas con el concepto que está seleccionado en la ventana principal (las de
propiedades del propio concepto según su tipo, pueden permanecer en varios estados,
sincronizadas, desconectadas...). Pulse los botones Siguiente y Anterior de la ventana
Textos, teniendo seleccionadas partidas, y podrá observar que algunos conceptos
tienen un texto múltiple asociado y otros no.

Si realiza los presupuestos con una base de datos de la construcción, para trasladar
cómodamente información a nuestros proyectos, podemos: bien importar el archivo
en formato estándar FIEBDC-3 que es uno de los formatos de distribución de la base,
o bien abrir el archivo Menfis de la versión que sea que se distribuya (muchas bases
utilizan Menfis para su elaboración y distribución).

Abrir un archivo
Ya hemos iniciado el programa, y podemos ver las herramientas y botones
principales en el tema ventana principal.

El directorio de trabajo
Cuando trabajemos con Menfis, después de instalarlo, el directorio de Trabajo estará
definido por defecto en el directorio Público (el directorio raíz de instalación del
programa), pero podemos cambiarlo para tener en un directorio independiente los
archivos de trabajo leídos y grabados, así como el histórico de directorios favoritos

En el menú también se muestra el directorio de trabajo con los últimos archivos


utilizados.

Seleccione el botón Herramientas > Opciones.... > Directorios > Trabajo para abrir
el diálogo estándar con ese mismo nombre. Pulse el botón Crear nueva carpeta, para
crear el nuevo directorio de trabajo, dándole el nombre DATOS, vemos que pos
defecto aparece en el directorio de instalación.

Pulse INTRO para aceptar la creación del directorio, y el botón Guardar para cerrar
el diálogo. Pulse Cierra en la ventana Opciones

Para abrir un archivo Menfis


En primer lugar, vamos a adoptar una convención muy práctica para seguir los
ejemplos del manual: Cuando se indique en cada capítulo, DEBEMOS hacer una

Guía rápida de usuario / 15


copia de los archivos del directorio cuando se vayan a modificar datos, de esta forma
conseguimos varias cosas:

a. Mantener una copia del estado original de los archivos de ejemplo (aunque
siempre podemos recuperarla del CD-ROM en caso de apuro)

b. Poder partir desde el principio de cualquiera de las prácticas sin tener que
depender de en qué punto nos quedamos modificando los archivos

c. Poder seguir cualquier lección que nos interese, seleccionando un tema


desde el índice, sin tener que realizar todos los ejemplos desde el principio

Vamos entonces a realizar por primera vez esta operación:

1. Seleccione la opción Archivo·Abre archivo... para abrir el diálogo estándar


con ese nombre.

2. Ahora, nuestro directorio de trabajo se abre en . Este diálogo estará en


blanco, porque todavía no ha grabado ningún archivo ni visitado ningún
directorio, y debe pulsar el botón Subir un nivel, para ver todos los
subdirectorios de Menfis.

Seleccione el directorio y debajo de él, el archivo de la base centro97.men; después


pulse el botón Acepta.

El primer paso será, como hemos dicho, copiar el archivo mediante Archivo·Copia
archivo... porque vamos a hacer pruebas y no sabemos cuando lo vamos a modificar.
Le damos en el diálogo el nombre MI_centro97 y la extensión .men se la pondrá
automáticamente el programa.

La próxima vez que pulsemos el botón Abrir archivo, en el directorio encontraremos


un acceso directo al directorio que ya hemos visitado, que nos sirve para poder llegar
a él cómodamente.

Este diálogo no solo permite seleccionar un archivo para abrirlo, sino que en él se
puede: eliminar archivos, cambiar de nombre, copiar, y mover archivos. Un diálogo
similar encontrará cada vez que tenga que seleccionar un nombre de archivo, bien
sea para crearlo, importarlo, leerlo, etc.

Recuerde, que como en otros programas Windows, al final de las opciones del menú
Archivo se añade una lista con el histórico de los últimos archivos abiertos. Si
selecciona uno de ellos, se abrirá automáticamente.

Menfis es compatible con el formato de archivos de las versiones anteriores a través


de importación y exportación de datos. Dado que tiene un nuevo sistema de base de
datos, ya no es posible abrir los archivos de versiones anteriores directamente, pero
la conversión se realiza automáticamente al abrirlos: se realiza una importación de
datos en formato FIEBDC-3 guardando el archivo de la versión anterior con otro
nombre. Por ejemplo al abrir un archivo llamado "obraLinares.men" se creará el
archivo de la versión 8 con ese nombre, y se guardará el antiguo como
"obraLinares_7.men".

Tenga en cuenta que los archivos de Menfis 8 no pueden ser leídos con versiones
anteriores de Menfis, la compatibilidad es siempre hacia atrás.

Introducción al programa / 16
Con el botón derecho del ratón sobre la lista de archivos se despliega el menú que le
permitirá organizar sus archivos, sin necesidad de utilizar el Explorador del
Windows.

Lea la pista de cada uno de los botones del diálogo, y si lo desea pruebe a pulsarlos
para conocer su funcionalidad.

Para cerrar el programa


Cuando termine de trabajar, seleccione la opción Archivo > Fin programa. O bien,
cierre la ventana principal mediante la opción Archivo > Cierra ventana (o con el
aspa de la esquina superior derecha como en cualquier ventana de Windows),
aunque tenga abierta la ventana Menfis2 (archivo paralelo), se cerrarán las dos.

Los datos de Menfis se guardan cada vez que se crean o modifican a medida que se
van editando; puede cerrar el programa en cualquier momento con la seguridad de
que los datos están grabados en el disco. Solamente si el programa termina
anormalmente, por un corte de suministro eléctrico o un fallo del sistema, los
archivos necesitarán ser comprobados; esta operación la realiza Menfis
automáticamente al abrir el archivo y no se produce pérdida de datos, salvo quizá el
elemento que se estuviera editando en el momento de la interrupción.

En inicios sucesivos de Menfis se abrirá el archivo que tenía abierto al cerrar el


programa.

La ventana principal
Para tener una visión general de todas las herramientas accesibles en la Ventana
principal, donde se describen en detalle todas sus partes. A continuación veremos
unos comentarios sobre su utilización.

En cada una de las ventanas principales puede abrir un único archivo .men,
pudiendo trasladar información de un archivo a otro. (otra posibilidad es abrir el
mismo archivo en las dos, para tener dos vistas de él y trasladar información de unas
zona del archivo, a otra).

Controles de fases y ámbitos


La sección de Fases y Ámbitos tiene botones de desplazamiento para poder moverse
cómodamente por las certificaciones (fases) y por los ámbitos. En un primer
momento, las flechas se encuentran desactivadas, ya que este archivo no contiene
una serie de fases). Esta base tampoco tiene diversos Ámbitos de precios; si los
tuviese (como el archivo obra.men de los ejemplos), aparecería el nombre del ámbito
actual a la derecha de los botones del control de ámbitos.

Existen bases de datos de la construcción que utilizan múltiples ámbitos de precios


(juegos de precios alternativos que dependen, por ejemplo, de la provincia en la que
se realice al obra), de esta forma no es necesario publicar una base de datos para
cada provincia, sino que cada concepto podrá tener asociado un precio distinto por
provincia. Menfis maneja también este tipo de bases de datos, con lo que sus
proyectos pueden incluir esta posibilidad.

En los proyectos, los múltiples ámbitos pueden tener otros usos como por ejemplo,
llevar simultáneamente los precios de compra, de venta, el oficial, etc. en el control

Guía rápida de usuario / 17


económico de una obra.

Posición actual en la base


La sección inferior contiene el botón Búsqueda General. En la barra oscura a
continuación tenemos los datos del concepto padre de la descomposición actual y a
su derecha el conmutador del modo Edición. Si nos encontramos en el primer nivel
de carpetas como cuando se abrió el archivo, veremos la descripción del concepto
raíz del que cuelga todo el árbol: "PRECIOS CENTRO (EXTRACTO)".

Por último, señalar que este archivo no contiene mediciones -ya que se trata de una
base de datos-, luego no puede calcularse el presupuesto, en caso contrario,
aparecería en esta misma sección, a la derecha del todo, el presupuesto calculado
del concepto padre de la lista actual. En caso de estar en el primer nivel, el
presupuesto total del proyecto.

La lista de conceptos
La zona central de la ventana principal, puede estar dividida en dos paneles, si lo
desea. Arrastrando con el ratón la barra vertical que puede encontrarse pegada al
lado izquierdo, podemos redimensionar el panel de búsqueda en árbol. Su
funcionamiento es muy similar al panel de árbol del explorador, ya que además
sincroniza cualquier posicionamiento, con el lado derecho.

Al abrir cualquier archivo, en el panel derecho (el más importante), se visualiza la


lista de conceptos hijos del concepto que se muestra en la sección anterior. Esta
lista no sólo permite consultar los distintos niveles de la organización estructural
del archivo (padres-hijos), también muestran listas de relaciones o conceptos
seleccionados mediante diversos criterios.

La sección que hay sobre la cabecera de la lista, que ahora nos muestra el concepto
raíz (.) y el rótulo del mismo: PRECIOS CENTRO (EXTRACTO), varía según el tipo de
consulta que se realice. En este sentido la lista de conceptos puede contener:

Una lista de hijos (descomposición) de un concepto dado, en cuyo caso el título


muestra los datos del concepto padre de esa lista.

Una lista de padres (composición) de un concepto dado, el título mostrará los datos
del concepto hijo común.

Una lista de conceptos que cumplen una determinada condición: por ejemplo: que su
resumen contenga la palabra 'hormigón'. En este caso se muestra el rótulo "LISTA
DE CONCEPTOS:".

Una lista de relaciones o padre-hijo que cumplen una determinada condición. Para
representar las relaciones, siempre se muestran los datos del concepto hijo de cada
una de las relaciones, y los datos interesantes de la relación. Por ejemplo, si
buscamos conceptos que tengan un rendimiento inferior a 1, el título de la lista
muestra el rótulo "LISTA DE RELACIONES:".

Las columnas de la lista de conceptos, y las de todas las listas de Menfis, tienen
como cabecera botones rotulados: Tipo, Código, Ud., Resumen, ... y otros incluso
programables.

Estos botones cabecera de lista pueden estar visibles u ocultos y la pulsación sobre

Introducción al programa / 18
los visibles, tiene el siguiente comportamiento:

Teniendo en la ventana principal una lista de conceptos, al hacer clic sobre un


botón, los elementos de la lista se ordenan de forma ascendente según los datos de
esa columna. Al volver a hacer clic sobre el mismo botón, se ordenarán de forma
descendente, y al hacerlo por tercera vez, volverán a su orden original. Estas
opciones de ordenación se corresponden con las opciones que tiene el menú
contextual de estos botones (recuerde que los menús contextuales se muestran
siempre con el botón derecho del ratón).

Las columnas de la lista (se muestren o no, ya que se pueden personalizar mediante
el menú contextual) son, por orden:

Tipo: icono representativo del Tipo, Clase de concepto, o bien un icono


personalizado: Las Carpetas representarán los capítulos de obra y de organización de
bases de precios, los conceptos genéricos llamados “Varios” representarán partidas
de obra y materiales auxiliares, el icono de recurso representará los conceptos
simples (Maquinaria, Materiales, Mano de obra, Subcontratas). Además de estos
tenemos otros muchos, pero para usos más avanzados.

Código: identificador único para cada concepto, JUNTO al código de Tipo, es decir,
en cada uno de los distintos tipo sí puede repetirse un código.

Ud.: unidad de medida: m2, m3, h., etc.

Resumen: texto resumido descriptivo del concepto

Precio: precio del concepto o coste (precio del concepto más costes indirectos,
definidos en el campo Proyecto·Ventana Parámetros Generales...·Decimales·%
Costes indirectos), cuando se muestra una descomposición al nivel de partidas.

Cantidad: medida en la que interviene cada concepto hijo en el concepto padre. Este
dato aparece en color morado para indicar que esta cantidad es un dato de la
relación entre conceptos, y no del propio concepto, como por ejemplo el Resumen.

Importe: es el resultado de la multiplicación que se efectúa entre la columna


Cantidad y la columna Precio. Por encima de la cabecera de la lista, aparece la
suma de los subtotales (si está calculada con el conmutador
Herramientas·Calculado)

Info: son pequeños iconos de características que indican qué información tiene
asociada cada concepto. Más adelante, en el tema La columna Info, se detalla el
significado de los más habituales, aunque pueden definirse los que se desee en la
ventana Proyecto·Características...

Existe un código de colores para facilitar la lectura de los datos de conceptos. Estos
colores pueden modificarse en cada uno de los botones de la pestaña
Herramientas·Opciones...·Letras y Colores.

Los datos relacionados única y directamente con el concepto, como el Código o el


Resumen, se muestran en color negro -por defecto-, Los datos que están en la
relación entre un concepto y otro -por ejemplo, la cantidad de horas necesarias de
un determinado concepto-, se muestran junto a datos del propio concepto, pero en
color morado.

Guía rápida de usuario / 19


Los valores calculados por acumulación de presupuesto o por otros cálculos internos
del programa (como el precio de una partida con descomposición), se muestran en
color rojo y no pueden ser modificados directamente en el campo de edición. Los
datos alternativos, es decir datos que se pueden cambiar y solo afectan a un
concepto en un Ámbito determinado, como puede ser el precio), se muestran en
verde. Por último, si el fondo de un campo aparece en color amarillo, nos indica que
los datos son dependientes de la Fase del archivo en la que nos encontramos
actualmente.

La columna Tipo
Vamos a ver una de las partes más importantes de la filosofía del nuevo Menfis8:
que los conceptos que almacenan la información de la base de datos tienen asignado
un Tipo, y dentro del Tipo, puede tener una Clase (una especie de subtipo, pero con
información común entre las Clases del mismo Tipo). En función del Tipo y/o Clase,
el concepto tiene unas propiedades particulares y podemos identificarlo entre los
demás conceptos.

Hay bastantes Tipos de conceptos distintos en la aplicación, cada uno tiene unos
datos particulares -aunque haya datos comunes a algunos tipos-. Lo más importante
en cuanto a interfaz de ventanas, es que cada Tipo tiene una sola ventana de datos,
pero las pestañas y campos de la ventana pueden cambiar en función de la Clase de
conceptos que se esté mostrando.

Para la gestión y mantenimiento de Tipos, accedemos a la ventana Proyecto·Tipos de


conceptos... donde tenemos una estructura de árbol con sólo dos niveles que
representan cada Clase de concepto dentro de cada Tipo (algunos Tipos son más
simples y no tienen diversas Clases). En esta ventana podemos: modificar el icono
de los tipos seleccionando otro que nos guste más, cambiar de Tipo/Clase un grupo
de conceptos seleccionados en la venta principal o realizar una búsqueda de todos de
conceptos de cualquiera de las Clases.

Los nombres de cada uno de los Tipos no son modificables, pero sí podemos
personalizar el icono para algunos conceptos particulares, de forma que se coloque
"encima" del icono que por Tipo o Clase le corresponde. Puede hacer esto mediante
la opción Concepto·Concepto actual >·Cambio de icono...

Esta ventana sólo se utiliza para el mantenimiento que hemos mencionado y unas
búsquedas que no son muy finas, porque en archivos grandes nos ofrecerán listas de
centenares de conceptos.

En Concepto·Propiedades > tenemos un submenú con tantas opciones como Tipos se


muestran en la ventana de Tipos, y otro submenú para crear cada uno de los Tipos
en Concepto·Nuevo concepto > con todos los Tipos y submenús para las distintas
Clases.

Desplazarse por el contenido del archivo


Para seleccionar un concepto de la lista, haga clic sobre él.

En la ventana principal, para seleccionar el siguiente grupo de conceptos del mismo


nivel, puede pulsar el botón Siguiente o la tecla F1. En el primer nivel de capítulos,
estos botones se encuentran desactivados porque no hay ningún otro grupo de
conceptos al mismo nivel.

Introducción al programa / 20
En las ventanas de información adicional de los conceptos (textos descriptivos, textos
clasificados, gráficos, etc.), el botón Siguiente y la tecla F1 desplazan la selección una
posición hacia abajo en la ventana principal.

De igual forma, en la ventana principal, para seleccionar el grupo de conceptos


anterior (del mismo nivel), puede pulsar el botón Anterior o F2.

Si en vez de hacer clic para seleccionar, hace doble clic sobre un concepto, se
mostrará su descomposición, apareciendo el concepto padre como título de la lista de
sus hijos. Puede conseguir el mismo efecto seleccionando el concepto y pulsando el
botón Inferior, o la tecla F4. De forma análoga funciona Superior (F3), que le
permitirá subir desde cualquier profundidad de nivel hasta llegar al concepto raíz.

Para visualizar la descomposición de un concepto, haga doble clic sobre un capítulo y


podrá ver la lista de partidas que conforman el capítulo. La línea de posición actual se
modifica para mostrar el camino recorrido y el título de la lista muestra el concepto
padre. Siga haciendo doble clic sobre cualquier concepto hasta que la lista quede en
blanco y habrá llegado al último nivel de profundidad.

Seleccionando sobre cualquiera de las líneas con el botón derecho del ratón, iremos
en sentido contrario, subiendo por la estructura hasta el concepto raíz.

Entidades en una obra o base de precios


Algunas de las bases de datos de la construcción contienen conceptos de Tipo Entidad
para almacenar datos comerciales, de suministro, etc. Estas pueden representar
fabricantes, proveedores, contratistas...

En los proyectos de obra el uso de la Entidad es similar -una ficha de datos-, aunque
utilizando las herramientas de control de costes, se relacionará con más datos.

Para consultar entidades


En el archivo cam96.men, tiene un ejemplo de ellas. Observe que los dos conceptos
tienen en la columna Info el icono de poseer textos asociados.

Haga doble clic sobre el icono de Tipo y se mostrará la ventana de propiedades. Con
los botones Siguiente (F1) y Anterior (F2) puede moverse por las entidades de la
ventana principal.

Permite -si el archivo se encuentra en modo Edición-, crear


nuevas entidades en el archivo.

La pestaña de Entidad incluye información bastante completa: clase de entidad


(fabricante, distribuidor, proveedor...), NIF, nombre de la empresa, persona de
contacto así como correo electrónico y dirección Web...

Pulsando los iconos de la parte superior izquierda puede acceder al programa de


correo predeterminado o el explorador Web, para ello es imprescindible tener datos
en esos campos.

Guía rápida de usuario / 21


Lección 2: Realizar un presupuesto sencillo desde cero
Crear un archivo nuevo

Trasladar y mover conceptos

Modificar datos de conceptos

Conceptos de Tipo Medios auxiliares

**********************************

En otra lección se revisa el contenido y estructura de un archivo, ahora aprenderá a


crear un nuevo archivo, crear conceptos y trasladarlos desde otro archivo.

Crear un archivo nuevo


Seleccione la opción Archivo > Nuevo... Teclee un nombre con el que se guardará el
archivo en el disco, la extensión .MEN, propia de los archivos Menfis, se añadirá
automáticamente. Los nombres admitidos para los archivos Menfis son los admitidos
por el sistema operativo o la red sobre la que se utilice Menfis.

Se mostrará la ventana principal en blanco con el nuevo archivo en modo Edición,


preparado para teclear datos. Este conmutador permite modificar los contenidos del
archivo y afecta a todas las ventanas Menfis. Es decir, si abre la ventana Texto
estando Edición desactivado, podrá consultar los textos asociados a los conceptos pero
no modificarlos.

Podemos asignar un nombre al proyecto, que se corresponderá con el Resumen del


concepto raíz (el que está al nivel más alto y que existe incluso ahora que todavía no
hemos creado ningún concepto). Para editarlo, introdúzcalo en el campo Título de la
ventana Parámetros generales.

En esta ventana se definen coeficientes, decimales, variables para informes,


herramientas para gráficos, y datos generales que influyen en todo el archivo.

El nombre se muestra ahora en la sección oscura por encima de la lista de conceptos.


Del concepto raíz cuelga toda la estructura de obra y acumula en su importe el
importe total del proyecto.

Los valores iniciales, se encuentran en una plantilla que también es un archivo


Menfis. Se encuentra en el directorio raíz de instalación y se llama nuevo.men.
Cuando queramos modificar alguno de los Parámetros generales de archivo en todos
los nuevos proyectos que hagamos, basta con cambiarlos en este archivo, que
funciona como una plantilla.

Nuevos conceptos
Cuando el modo Edición está activado, debajo de la lista de conceptos, aparecen
campos de edición al pie de las columnas editables (en principio: Código, Resumen,
Precio y Cantidad). Las demás columnas son de gestión automática o de datos
calculados, por lo que no se pueden editar directamente.

Introducción al programa / 22
Veamos varias formas de crear conceptos:

A. Posicionados sobre una línea vacía, Tecleando un código: Teclee "01" (sin las
comillas ") y pulse INTRO. En la ventana principal se nos ha creado un
concepto con el código introducido, y junto a él una estrella de color amarillo.
Pinchando en la estrella amarilla podemos cambiar de Tipo; ahora nos
interesa crear conceptos de organización (carpetas), que es el que nos
sugiere. En el campo Resumen teclee "Demolición" y pulse INTRO o
TABULADOR, con lo que se acepta el dato y pasamos al siguiente campo.

B. Con el diálogo Nuevo concepto: teniendo seleccionada la siguiente línea a la


de la carpeta, seleccionamos Concepto > Nuevo concepto > Tipo carpeta... >
Sin clase... y se nos muestra un diálogo de creación de concepto similar, pero
con mas funcionalidad: el Código que se ha sugerido es el siguiente al último
existente, admite el Resumen (tecleamos "Estructuras"), nos permite
seleccionar únicamente la clase dentro del Tipo Carpeta (y no otro Tipo), y
además permite crear varios conceptos de una vez, pulsando el botón Nº 1. Al
pulsar Acepta, además se abre la ventana de propiedades correspondiente al
Tipo de conceptos que estamos creando.¿Por qué el concepto no aparece en la
ventana principal? porque desde el menú se ha creado descolgado en la base
de datos: la información está, pero no relacionada debajo del concepto raíz en
este caso. Para relacionar el concepto a la vez que lo creamos tenemos que
tener activado el conmutador "Cuelga". Si no estaba activado, para
relacionarlo, tecleamos en el campo Código "02" y se nos muestra.

C. Copiando el código: pasamos a la línea siguiente de la lista, y en el campo


Código y tecleamos una coma (,) que funciona como unas comillas repitiendo
LA RELACIÓN de la carpeta 02 bajo el concepto raíz. Ahora pulsamos con el
botón derecho del ratón sobre el icono de esa última línea y seleccionamos
Copia concepto... poniendo el Código "03" en el diálogo que se muestra. Ya es
un concepto distinto, con los datos copiados. Cambiamos el Resumen a
"Albañilería". Podemos copiar cualquier otro código que no sea el superior: lo
podemos seleccionar de entre una lista de conceptos, tecleando una máscara
de búsqueda en el campo Código. Por ejemplo, el asterisco (*) significa
cualquier número de caracteres, por lo que aparecerá un diálogo que nos dará
a elegir un concepto de entre todos los existentes. Seleccionamos uno, y luego
cambiamos el concepto igual que antes.

D. Creando el siguiente en una serie: tecleamos en el campo Código un signo


más (+) y se nos sugiere el siguiente código al último existente de ese Tipo.
Sólo con aceptar, ya lo tenemos creado. En el Resumen ponemos
"Carpintería".

Después de crear el conceptos de cualquiera de estas formas, observe que el campo


cantidad tienen por defecto el valor "1". Esto es porque las carpetas organizativas
tienen que acumular presupuesto, y si no tuviese cantidad, su importe sería cero,
pero si en algún caso quiere que sea así, puede cambiarlo.

Trasladar y mover conceptos


Los capítulos creados en el tema Crear conceptos no tienen ningún hijo. De la
misma forma que ha colgado conceptos tipo capítulo del concepto raíz de la obra (.),
podemos ir creando y colgando de cada capítulo las partidas que lo formen. Pero la

Guía rápida de usuario / 23


información de las partidas con sus textos descriptivos y descomposiciones suele ser
una información estándar, contenida en una base de precios de la construcción que
haya adquirido, por lo tanto, es mucho más cómodo trasladar los conceptos desde
dicha base de datos.

El archivo paralelo
En la ventana Menfis1 puede tener abierto un único archivo (una base de precios, o
una obra con su proyecto y certificaciones), para trasladar información entre
archivos es necesario ver simultáneamente los dos archivos. Para ello se utiliza
una segunda ventana principal llamada Menfis2, ambas ventanas son idénticas.

Para abrir un archivo paralelo, se pulsa el botón Menfis·2 de la ventana principal.

Si tiene dos archivos abiertos, cuando se encuentre en la ventana Menfis1, se


llama archivo paralelo al que está abierto en la ventana Menfis·2, y viceversa. Las
ventanas de información abiertas desde Menfis1, se rotulan en la barra de título
como Menfis1 - <ventana>.

El botón Traslada de cualquier ventana permite copiar información entre los


archivos abiertos en las ventanas Menfis1 y Menfis2. El criterio para trasladar
información se toma de los modos configurados en Modos Traslada.

Para trasladar un concepto


Haga doble clic sobre el capítulo 01 para visualizar la descomposición de dicho
capítulo, que ahora está vacía. Recuerde que también puede ver la descomposición
de un concepto seleccionándolo y haciendo clic en el botón Inferior o pulsando F4.

Abra la ventana del paralelo pulsando el botón Menfis·2 de la barra de botones.


Modifique la posición y tamaño de ambas ventanas para poder ver las listas de
conceptos al mismo tiempo.

En la ventana Menfis2 abrimos el archivo centro97.men del directorio \EJEMPLOS.


Haga doble clic sobre el capítulo "E", luego sobre los subcapítulos que quiera, hasta
llegar a los conceptos de tipo partida. Haciendo clic con el ratón sobre su icono,
seleccione una partida y arrástrela sobre la ventana Menfis1.

Como se trata de datos de archivos distintos se nos pide confirmación de que


queremos trasladar información copiada en el portapapeles. La misma función se
realiza haciendo clic en el botón Traslada de Menfis2

Para trasladar varias partidas a la vez, debe saber que se trasladan manteniendo el
orden en que fueron seleccionadas (aunque luego podemos moverlas dentro de
Menfis1).

Para comprobar la información copiada, haga doble clic sobre una de las partidas de
la ventana Menfis1 y verá que también se ha trasladado su descomposición en
simples.

Abra la ventana Concepto > Ventana Textos..., y podrá ver que también se trasladó el
texto de las partidas. La información trasladada se COPIA desde el archivo de la base
de datos al archivo de nuestro proyecto. Puede modificar precios, etc. sin que afecte
al contenido del archivo origen.

Introducción al programa / 24
Trasladar conceptos de códigos conocidos
No cierre el archivo de base de datos centro97.men de la ventana Menfis2.

Suponga que conoce los códigos de los conceptos que tiene que trasladar desde la
base de datos al proyecto de obra. Haga doble clic sobre uno de los capítulos de
Menfis1. En el campo de edición de la columna Código, teclee "E01MRL040" e INTRO.
Si no la había trasladado ya, aparecerá con todos sus datos, ya que ha buscado en el
paralelo y la ha tomado de allí.

IM PORTANTE: Todos los traslados de información (incluidos importaciones y


exportaciones), dependen del modo establecido en la ventana Traslada.

Cuando teclea un código de concepto, Menfis busca este código en el archivo actual:

1º.Si lo encuentra utiliza éste sin pedir confirmación.

2º.Si no lo encuentra lo busca en el archivo paralelo, y si lo encuentra pide


confirmación para trasladar el concepto.

3º.Si tampoco lo encuentra en el archivo paralelo, considera que es un concepto


nuevo, y pide confirmación para crearlo.

Vaya a la descomposición de otro capítulo y cuelgue también de él la misma partida


"E01MRL040". En este caso encuentra el código en el archivo actual, apareciendo su
Unidad de medida, Resumen y Precio en los campos correspondientes.

Cuando se intenta cambiar el Código de un concepto desde el campo de edición,


Menfis entiende que quiere eliminar el concepto actual de la descomposición que
está consultando, y colocar en su lugar otro concepto. El concepto descolgado
permanecerá en el archivo, aunque solo estuviera en la descomposición de la que
se ha descolgado. El concepto que se cuelga en su lugar se buscará siguiendo las
mismas reglas que al colgar un nuevo concepto de código conocido.

Este comportamiento cambia cuando lo que está consultando es una lista de


conceptos buscados por alguna característica común, en vez de consultar la
descomposición de un concepto. En este caso al modificar el código de un concepto,
se interpreta que quiere cambiar el código del concepto sin sustituirlo.

Ejemplo: creamos bajo el capítulo 01 una partida alzada "EE01" con Unidad metros
cuadrados "m2" (Si nos pregunta si queremos crear una unidad nueva, pulsamos
Aceptar, porque las Unidades no son textos libres sino Clasificados), Resumen
"Desbroce terreno" y Precio 2,33.

Si nada más crearla pulsamos la tecla SUPR teniéndola seleccionada, se muestra


un diálogo que da a elegir entre solamente descolgar la línea (como relación), o bien
eliminar la unidad de información completamente (como concepto). Elegimos la
primera opción, pasamos al siguiente capítulo con el botón Siguiente, y tecleamos el
código "EE01" mostrándose la unidad de información tal como la teníamos: sólo se ha
descolgado del capítulo anterior, pero los datos permanecen en el archivo.

Duplicar conceptos
Otra posibilidad es que necesite varias partidas iguales o casi iguales, pero deban
tener distinto precio y alguna otra unidad de información distinta. Seleccione la

Guía rápida de usuario / 25


partida creada anteriormente (EE01) y pinche con el botón derecho del ratón sobre el
icono de la misma para mostrar el menú contextual Concepto > Concepto actual...

Seleccionamos Duplicar concepto... y aceptamos el nuevo código que se nos sugiere


(incrementado automáticamente para crear una serie). En la descomposición actual
se queda el nuevo, pero el original no desaparece: sólo se queda descolgado y si lo
tecleamos bajo otro capítulo aparecerá como una copia del actual. El concepto
original ha sido sustituido para mantener la medición (que en ocasiones puede ser
desglosada, con centenares de líneas, y no nos interesa perderla por accidente).

Ambos conceptos son independientes y se pueden modificar todos sus datos sin que
uno afecte al otro.

Modificar datos de conceptos


Los conceptos trasladados pueden no ser exactamente los que necesita en la obra,
puede haber trasladado algún concepto parecido para luego modificarlo, que es más
rápido que crearlo.

Los datos de cada línea de concepto se modifican en los campos de edición al pie de
las columnas. Nos situamos al nivel de las partidas y fíjese en que la cifra que figura
en al campo Precio no coincide exactamente con la que aparece en la lista de
conceptos. Esto es debido a que cuando se cuelga un concepto no capítulo debajo de
una carpeta, se considera que se trata de una partida de obra, aplicando los costes
indirectos y el redondeo del número de decimales de costes. En este caso la
diferencia corresponde al redondeo, puesto que aún no se ha especificado un
porcentaje para los costes indirectos.

Tecleamos "1000" como nuevo precio de la partida y pulse INTRO. Aparece un diálogo
con el mensaje de aviso: No se puede cambiar el precio de un concepto con
descomposición. a no ser que se trate de unas condiciones muy especiales -un precio
definido en múltiples ámbitos de precios (ya veremos que son en otro capítulo), sea
un ámbito con ruptura y no sea el precio del ámbito principal-.

Un concepto que tiene descompuestos calcula automáticamente su Precio con los


precios de los conceptos que tiene por debajo de él, y por tanto su precio no es un dato
que se pueda cambiar manualmente. Pulse INTRO, para no eliminar los
descompuestos.

Haga doble clic en la partida que ha intentado cambiar, para visualizar su


descomposición, y edite el Precio del primer concepto, sustituyendo su precio por el
doble.

Haga clic con el botón derecho del ratón para visualizar de nuevo la partida y
observará que el coste de la partida se ha recalculado. De la misma forma podemos
cambiar el Resumen, el Texto descriptivo, e incluso la descomposición y otros datos,
abriendo la ventana de propiedades del concepto mediante un doble clic de ratón en el
icono del concepto.

Conceptos de Tipo Medios auxiliares


Como ejemplo de utilización de este tipo de concepto especial, utilice el archivo
ejemplo.men. Debajo de la primera partida del primer capítulo, encontrará conceptos
con el carácter porcentaje "%" incluido en su código, y que pertenecen al Tipo Medio

Introducción al programa / 26
auxiliar que tienen un funcionamiento peculiar en cálculos de importes.

Estos conceptos no tienen precio propio, su precio se calcula multiplicando la suma


de los subtotales de todos los conceptos que estén colocados en las LÍNEAS
SUPERIORES A LA SUYA en la lista de conceptos, por la medición o cantidad del propio
concepto Medio auxiliar. Estos conceptos representan los medios auxiliares y el
pequeño material imputable a la partida, así como los costes no imputables o costes
indirectos que veremos más adelante.

IM PORTANTE: El precio de estos conceptos variará automáticamente al cambiar el


precio o rendimiento de cualquiera de los conceptos de los que depende. A diferencia
de los conceptos normales que tienen un único precio en toda la obra, estos tienen
distinto precio en cada una de las descomposiciones en las que intervienen.

Cuando existen caracteres por delante del carácter "%", el precio del concepto se
calcula como la suma de subtotales de los conceptos posicionados por encima de su
posición en la lista, cuyos primeros caracteres del código coincidan con los
caracteres antepuestos al "%" en el código del concepto especial. Por ejemplo, el
concepto especial MM% sólo utilizará para calcular su precio los conceptos anteriores
cuyo código comience con MM. Su propio código actúa como filtro.

Lección 3: Manejar mediciones desglosadas


Formato de mediciones

Crear líneas de medición

Utilizar expresiones al medir

Introducir una referencia a otra medición

Modificar dimensiones en líneas de medición

Mover, copiar y borrar líneas de medición

Validar una medición o cancelar cambios

**********************************

Tenemos todos los conceptos y estructura de la obra definidos, ahora falta introducir las
mediciones. Partiremos del archivo ejemplo.men original para no trabajar con pruebas
de otras lecciones. Recuerde hacer una copia de él antes de empezar a practicar, para
mantener siempre un original.

Para especificar una medición simple, partimos desde la ventana principal. Seleccione
el primer capítulo y bajo un nivel en la descomposición, marcamos la partida ECMR.6ab.
Para especificar una medición simple son situamos en la columna Cantidad e
introducimos otro valor (el programa nos pregunta si queremos eliminar la medición
desglosada porque esa partida ya tiene una). Aceptamos y podemos comprobar que el
cambio de medición e Importe se reflejan inmediatamente, esto es debido a que el
archivo está en modo Calculado en el menú Herramientas.

Cuando el conmutador Calculado está activado, Menfis mantiene todos los precios y

Guía rápida de usuario / 27


cantidades calculados continuamente. Cada vez que hace un cambio en alguno de los
datos que interviene en el presupuesto (precio, cantidad, etc.), se actualiza el
presupuesto total en la ventana principal. Como regla general, debe tener activado este
conmutador en las obras y desactivado en las bases de datos.

Se puede introducir directamente una cantidad pero, por supuesto, es posible introducir
la cantidad desglosada en líneas. Para abrir rápidamente la ventana de Mediciones
desglosadas, hacemos doble clic sobre los iconos de la columna Info. Estos iconos
indican las características de información asociadas a cada concepto, y según un
criterio de prioridad cuando tiene mediciones, se muestra esta ventana (si no tuviese
mostraría la de textos, y sino pasaría a mostrar la descomposición como si hiciéramos
clic en cualquier otra parte de la línea).

Recuerde que el conmutador Edición de la ventana principal debe estar activado para
que aparezcan los campos de edición.

Formato de mediciones
Lo primero es definir el formato (dimensiones) de la medición. Si no nos valen las
dimensiones que la ventana nos sugiere, podemos abrir y cerrar dimensiones
haciendo clic en su botón de cabecera, o definiéndolas en el diálogo del botón
Formato.

Elimine de esta forma, la edición en la columna Alto.

La lista de líneas de medición contiene una columna con la cabecera T (tipo), que
sirve para visualizar el tipo de cada línea de medición. Sirve para establecer líneas
de medición de tipos especiales (cálculos, rótulos, filtros...), además de las de desglose
normal. Los tipos especiales se ven en el diálogo que se muestra con el botón Tipo...:
suma Parcial, suma Total, Expresión, Cabecera alternativa, Grupo analítico, y
Referencia externa.

Crear líneas de medición


En el campo de edición al pie de la columna Comentario, teclee "Salón comedor", en
NºUds. teclee "1", en Largo teclee "3,24", y "2,75" en Ancho. Puede utilizar el teclado
numérico, y el punto del como separador decimal (aunque en español sea una coma).

Si hay más dimensiones abiertas, déjelas en blanco. Asegúrese de que el


conmutador M.Repite está pulsado, ya que suele ser el modo de funcionamiento
normal.

En la segunda línea, salte el Comentario, introduzca un "1" en NºUds. y "9,23" en


Largo, pulse INTRO en los demás campos para terminar la línea. Observe que el
valores de la línea superior se han copiado en la inferior automáticamente en las
dimensiones en blanco. Podemos evitar teclear datos iguales con el Modo Repite
activado (excepcionalmente esto no ocurre cuando dejamos una línea completamente
en blanco o la línea que se edita es una línea de algún tipo especial.

Crear líneas de tipo Suma parcial


Introduzca una tercera línea de medición tecleando "Subtotal" en Comentario. Haga
doble clic con el ratón en la columna T (tipo) para abrir el diálogo Selección de Tipo.
Seleccione "P" (Suma parcial).

Introducción al programa / 28
En la cuarta línea introduzca "Muro norte" con las mediciones siguientes: "1" en
NºUds., "2,34" en Largo y "4,56" en Ancho.

En la quinta y sexta línea introduzca únicamente el campo Largo. Con los valores
"3,27" y" 4,20", respectivamente. Copiándose automáticamente los valores de los
otros campos desde la cuarta línea a la quinta, y de la quinta a la sexta.

En la siguiente línea seleccione "P" como tipo de línea de medición (sin ningún
comentario, que es opcional).

Las líneas de tipo P presentan en la columna Parcial, la suma de parciales desde la


línea suma parcial anterior, o desde el comienzo de la medición si no hay parcial
anterior. Este tipo de líneas no admite valores en el resto de los campos, si teclea
algo en ellos, se ignora el dato.

Por último, añada una nueva línea tecleando "Total Salón comedor" en su
Comentario, pinche con el botón derecho del ratón en la columna T y seleccione "T"
para el tipo de línea, pulsando Acepta. Las líneas tipo Total, presentan en la columna
Parcial, la suma de parciales desde el comienzo de la medición.

Utilizar expresiones al medir


Puede especificar el parcial de una línea de medición como una operación entre sus
dimensiones. En el campo Comentario se introducirá la expresión a evaluar,
especificando para la línea el tipo "E" (Expresión)

Haga clic en el botón Siguiente de la ventana Mediciones, o pulse la tecla F1 para


seleccionar otra partida. Teclee los siguientes datos:

Fíjese en los parciales: Las tres primeras líneas han sumado los valores de Largo y
Ancho; y las otras tres líneas han multiplicado los tres valores: NºUds., Largo y Ancho.
Puede utilizar las líneas de tipo E (expresión) con las siguientes variables:
a = NºUds.

b = Largo

c = Ancho

d = Alto

p = constante matemática Pi (3,14...)

Desde que se especifica una línea de tipo E hasta la siguiente línea de tipo E los
parciales de cada línea posterior se calculan con la expresión definida en la columna
Comentario de la línea de tipo E.

Guía rápida de usuario / 29


IM PORTANTE: Aunque Menfis admite otras funciones de la calculadora, si se desea
compatibilidad con otros programas, estas expresiones deberán limitarse a sumas (+),
restas (-), multiplicaciones (*), divisiones (/) y potencias (^), con cualquier
combinación de paréntesis.

Cuando en el Comentario se especifica una expresión constante, es decir, cuando no


esté en función de ninguna variable, sólo afectará a la línea donde ha sido definida,
no propagándose a las siguientes líneas. Por ejemplo, seleccionamos la tercera línea,
ponemos el cursor en el campo de edición de Comentario, y pulsamos CTRL+INSERT
para crear una nueva línea en blanco. En el campo ponemos la siguiente expresión:
(4,5+3,55)*3,2

A continuación pulse , seleccione la "E" para especificar que es una


línea de tipo expresión, y pulse Acepta.

Verá que el parcial de esta línea es 25,76 (es el resultado de evaluar su expresión),
pero la siguiente línea sigue calculándose con la expresión definida en la última
expresión no constante.

Medir con la calculadora


Vaya a otra partida para introducir más datos. En el campo Largo pulse F9 para abrir
la ventana Calculadora.

Para asignar al campo actual el resultado de una operación, por ejemplo la raíz
cuadrada de 1,69 más la mitad de 3,4 teclee: sqrt(1,69)+3,4/2.

Pulse INTRO para cerrar Calculadora. El resultado de la operación es 3, y quedará


asignado al campo.

Introduzca en el campo Ancho el valor 3.

Seleccione la siguiente partida con F1 e introduzca los mismos datos en sus


campos: NºUds.=1, Largo=3 y Ancho=3.

La calculadora, no sólo opera con cifras y expresiones matemáticas, también sirve


para introducir o modificar datos masivamente en campos alfabéticos o
alfanuméricos.

Introducir una referencia a otra medición


Se pueden introducir líneas especiales (tipo R) que son enlaces o referencias a
mediciones totales de un concepto del mismo archivo. Este enlace permite que
cualquier modificación en la medición origen, se refleje en nuestra línea de
medición. Las condiciones que debe cumplir una referencia son:

El origen y el destino deben estar en el mismo archivo

Ambas deben estar desglosadas (no pueden ser directas)

Se referencia la medición origen entera, no se pueden referenciar líneas


separadas, excepto cuando se referencian grupos analíticos

Seleccione una partida cualquiera del capítulo "01" de nuestro archivo de ejemplo y
pase a la ventana medición.

Introducción al programa / 30
Abra en la ventana paralela el mismo archivo de prueba, y su correspondiente
ventana de medición. En el menú ventanas es posible que tenga una combinación de
ventanas que corresponda con esta; puede seleccionarla en vez de abrirlas una por
una.

Ahora seleccione una partida distinta de la de Menfis1 que tenga una o más líneas
de medición.

Sitúese en cualquier línea de la ventana Menfis1 - Medición y pulse Referencia... En


el diálogo que permite opcionalmente tratar grupos analíticos, pulse simplemente
Acepta. Automáticamente queda vinculada la medición destino y aparece una nueva
línea que a todos los efectos es una línea de medición más, pero con ciertas ventajas.
La línea contiene el camino completo al concepto referenciado y su código.

Cambie ahora la medición de la partida de Menfis2 - Medición, poniendo un valor


distinto en el campo Ancho, por ejemplo. En cuanto abandone esta ventana pulsando
Menfis1 - Medición, o pulsando el botón Valida, el cambio se refleja en la otra
medición.

Quite el modo Edición de la ventana principal, sólo de esta forma se pueden expandir
las referencias hechas a otras mediciones. Pulse el conmutador M.Expande y podrá
ver el desglose de la medición como si la hubiera tecleado. En la programación de
informes se pueden utilizar funciones para mostrar las mediciones como más nos
convenga: expandidas o como referencias.

Modificar dimensiones en líneas de medición


Seleccione una de las partidas del capítulo 01, que tenga unidad de medida m2
(metros cuadrados).

Pulse , y en la ventana correspondiente, desactive el conmutador


Ancho, active el Alto, y haga clic en Acepta.

Como puede ver, los datos en la columna Ancho han pasado a Alto y no se ha perdido
ninguna información. Esto pasará siempre que se mantenga el mismo número de
dimensiones, Menfis siempre intentará que no se pierda información.

Si en el cambio de formato disminuye el número de dimensiones, los datos de las


dimensiones que desaparecen no se perderán, quedan guardados en base de datos
donde estaban, por si más adelante cambiar otra vez la dimensión.

Mover, copiar y borrar líneas de medición


Como regla general, para mover líneas, seleccione todas las líneas que quiera mover,
haga una última selección adicional de la línea delante de la cual quiere que se
coloquen las líneas seleccionadas y pulse Mueve.

En el desglose de la primera medición del capítulo 03, seleccione las tres primeras
líneas (por ejemplo, haga clic en la primera y arrástrelo hasta la tercera).

Seleccione también la última línea, haga clic sobre ella manteniendo pulsada la
tecla control (multiselección).

Guía rápida de usuario / 31


Pulse . Verá que las tres primeras líneas se mueven delante de la
última línea.

El orden de la selección de líneas es importante, porque las líneas se mueven en el


mismo orden en que fueron seleccionadas. El botón Mueve puede utilizarlo no sólo
para mover líneas de un sitio a otro, sino también para ordenarlas.

Si en vez de mover líneas, lo que desea es copiarlas siga el mismo procedimiento


pero utilice el botón Copia en vez de Mueve.

Además puede arrastrar y soltar (hacer drag&drop) en la ventana de medición, para


realizar estas mismas funciones.

Vamos a restaurar las líneas en la posición que estaban utilizando solamente el


ratón. Para mover, pinchamos en la quinta línea y arrastre hacia abajo para
seleccionar las dos inferiores también.

Pinche en el bloque seleccionado, dentro de la columna T, donde aparece el cursor


de arrastrar y soltar líneas.

Arrastre el ratón sin soltar el botón, hasta ponerse encima de la primera línea y
suéltelo.

Borrar líneas de medición


Acuérdese de no salir de la ventana de medición, ni cambiar a otra, sin pulsar
Deshace... para descartar las pruebas que se enumeran a continuación (también
puede copiar este archivo con otro nombre para hacer pruebas de borrado)

Para borrar una línea de medición seleccione la línea haciendo clic sobre ella o
desplazándose hasta ella y pulse la tecla SUPR. Si desea borrar varias líneas
consecutivas, mantenga presionada la tecla SUPR

Si el foco de la ventana se encuentra se encuentra en los campos de edición, puede


suprimir la línea actual con CONTROL+SUPR.

Si quiere borrar varias líneas sucesivas o salteadas, haga una selección múltiple de
las líneas a borrar y haga clic en el botón Elimina, se realizará la operación sin pedir
confirmación.

Validar una medición o cancelar cambios


Cuando introduce o cambia líneas de medición desglosadas, Menfis no recalcula
automáticamente las cantidades e importes de la obra. Esto es cierto incluso estando
activado el conmutador Calculado del menú Herramientas. Lo contrario supondría
una pérdida de tiempo innecesaria.

En el momento en que utiliza los botones Siguiente o Anterior para seleccionar otro
concepto, o pulsa el botón Valida, o bien cambia a otra ventana, se recalcula todo el
presupuesto para ajustarse a los cambios hechos en la medición.

Introducción al programa / 32
Para validar la medición sin cambiar de concepto
Con la primera partida del capítulo 04 seleccionada, disponga la ventana principal y
la de Medición de forma que pueda ver todos los datos de las dos a la vez.

Seleccione una de las primeras líneas de medición desglosada y pulsa SUPR. La


línea desaparece y el subtotal de la ventana Medición cambia, pero no la Cantidad
en la ventana principal.

El valor total de la medición se actualiza en cuanto señalamos la ventana principal,


abandonando la de Medición.

Cancelar cambios
Puede deshacer los cambios hechos desde que se comenzó a modificar una
medición, pero sólo hasta que valide los cambios o abandone la ventana. Por
ejemplo, en el caso anterior, como hemos validado la modificación cambiando de
ventana, el botón Deshace... permanece desactivado (no hay nada que se pueda
deshacer).

La única posibilidad para deshacer cambios después de cambiar de ventana, o


incluso deshacer varios a la vez, es mediante la ventana Deshacer.

Borramos otra línea de la ventana Medición, pero esta vez no cambiamos de


ventana. Para cancelar este cambio hecho en la medición, pulse las teclas
MAYÚSCULAS+F2 (o clic en el botón Deshace...) para abrir el diálogo de confirmación
de deshacer.

Pulse INTRO o haga clic en el botón Sí y verá cómo reaparece la línea de medición
que borró hace un momento.

Lección 4: Las certificaciones (Fases de obra)

Usuarios noveles en Menfis:


Para usuarios nuevos en el manejo de Menfis o en general, de proyectos y
certificaciones:

Creamos con una plantilla existente o desde cero, un archivo de presupuesto con una
estructura de capítulos, partidas o actividades de obra, y descomposiciones, si
procede. Esos serán los precios del presupuesto teórico del proyecto. Los datos pueden
provenir de una primera aproximación nuestra, incluidos precios, o de una petición
de oferta para el mismo presupuesto, que estuviese sin valorar.

Pasado un mes del comienzo de la obra -o el periodo de certificación que


corresponda-, para crear la primera certificación, damos de alta una nueva fase. Se
copiarán todos los datos de estructura y precios, pero no las mediciones de partidas,
que son los datos "oficiales" de certificación que tenemos que rellenar.

Cuando llegue el final de una partida, marcamos la línea del concepto con una marca
de finalización (mediante el menú contextual), -no importa que se haya excedido o
no se haya alcanzado la medición de proyecto-. La marca consiste en una letra 'T'

Guía rápida de usuario / 33


que se rotula en el campo de Cantidad de la partida EN LA FASE ACTUAL. En las fases
posteriores permanecerá esa marca, indicando que ya está terminada en cualquiera
de ellas, y si ponemos la marca de finalización en una fase ANTERIOR a la que ya la
tiene ahora, se desplaza la marca de forma que sólo existe una marca para cada
concepto en todas las fases.

Todos los usuarios:


Como no hay ninguna distinción visual entre los campos comunes a todas las fases,
debe tener muy claro los que pueden variar en distintas fases: Precio y Cantidad. El
Importe, tanto en capítulos como en cualquier concepto con descomposición, será
distinto por ser un cálculo (el producto de ambos).

La primera fase siempre se crea con los precios del proyecto y todas las mediciones
en blanco.

La creación de las siguientes fases a la primera, conlleva una copia de las cantidades
de la fase anterior, para mantenerlas o corregirlas, ya que la certificación de cada
Fase SIEMPRE se realiza A ORIGEN de obra (aunque los datos también se pueden
introducir como cantidades parciales en el campo correspondiente de la ventana
principal, C.Parcial, y mostrar otros datos parciales o de proyecto (muy útiles estando
en una fase).

En esta versión 8, aparece la ventana de certificación de mediciones, cuyo


funcionamiento es idéntico al de la ventana de mediciones desglosadas, en la cual
podremos ver simultáneamente la medición desglosada del proyecto y la medición
desglosada de la certificación actual a origen.

Lección 5: Personalizar y programar informes


Crear un informe nuevo

Para mejorar el informe: cabeceras y pies de página

Cambiar cabeceras de informes

Para personalizar las cabeceras

Parámetros de los informes

********************************************

La definición de cada informe o herramienta programada, se guarda en un archivo de


texto plano (ASCII) mediante un programa en lenguaje JavaScript, que la aplicación
interpretará en el momento de imprimir o ejecutar la herramienta.

Si quiere hacer un cambio permanente en un informe, tendrá que modificar el


programa correspondiente (las modificaciones se guardan automáticamente en disco al
abandonar la ventana). Pero si lo que quiere es hacer una modificación temporal, puede
variar las variables de la ventana Parámetros.

Con un archivo de ejemplo abierto en la ventana principal haga doble clic en la línea o

Introducción al programa / 34
clic en Preliminar.

Suponga que imprimiendo este informe en papel, y al comenzar con el capítulo 5, el


papel se atascó en la impresora, o sufrió un corte de electricidad. Podemos lanzar
cualquier informe de nuevo, desde una página seleccionada:

Teclee '5' en el campo Páginas a imprimir, después haga clic de nuevo en Preliminar y
verá que la primera página que aparece es esa, con su número de página correcto.

Crear un informe nuevo


Lo habitual es que no necesite definir nuevos informes, ya que con los informes
distribuidos con la aplicación y utilizando los parámetros que veremos más adelante,
obtendrá la información que necesita en la mayoría de los casos.

Como ejercicio, trabajaremos con el archivo de proyecto ejemplo.men. En la ventana


informes y procedimientos, haga doble clic en la zona de la columna Código en la
línea de cualquiera de los informes que se esté mostrando. Con esto abrimos la
ventana de Programa del informe.

IM PORTANTE: El primer paso es hacer clic en el botón Copia, y teclear "prueba"


como nombre de archivo (no es necesario poner la extensión .xjs). Si no lo hiciera
así, todos los cambios los haría sobre el informe original y perdería el mismo.

Si volvemos a la ventana informes y procedimientos, observamos que hay dos


informes con el mismo título, pero el nombre de archivo del segundo es el nuevo.

Ahora reemplace todo el programa que aparece en pantalla por las siguientes líneas
(puede seleccionarlo todo poniendo el cursor en la primera línea y pulsando las teclas
CONTROL+MAYÚSCULAS+FIN, y copiarlo desde esta misma página para no tener que
teclearlo):
//// Informe de prueba

incluir ("cab")

incluir ("libcap")

capitulo_recorre (concepto);

function concepto (que, ci,ri,niv,pos)

imp.tabla ("20 10 . 20")

if (que==1) {

imp (bas.con.cod(ci));

imp (); imp (bas.con.res(ci));

imp () ;imp.linea ("l2");

return

Guía rápida de usuario / 35


if (!que) {

imp (bas.con.cod(ci));

imp (bas.con._uni(ci));

imp (bas.con.tex(ci));

imp (bas.rcc.pref(ri)),"a5");

imp.linea

imp.linea("v2",1)

La sintaxis es de JavaScript, aunque si tiene soltura programando en este lenguaje,


se dará cuenta de que hay varias partes desconocidas. Esto es porque se utilizan
métodos y objetos implementados en el programa mediante una ampliación COM del
lenguaje y además se utilizan dos archivos de librería que ya tienen implementadas
funciones y declarados objetos de propósito general para cualquier informe.

Pasamos a la ventana informes y procedimientos y hacemos doble clic sobre el


informe titulado "Informe de prueba".

Haga doble clic en la línea del informe para ver su vista preliminar. No tiene un
formato muy profesional, pero tampoco lo hemos programado con muchas líneas... y
muestra el Número y Resumen de cada capítulo y debajo, cada partida con su Código,
unidad, Texto descriptivo extenso y Precio.

Para mejorar el informe: cabeceras y pies de página


Volvamos al programa y modifíquelo como sigue:
//// Informe de prueba

incluir ("cab")

incluir ("libcap")

var conlineas=1 ////B Imprime líneas verticales [[0]]

capitulo_recorre (concepto);

function paginicia2()

imp.tabla ("20 10 . 20")

imp ("Orden"); imp("Uds."); imp("Descripción"); imp("Precio");

imp.linea ("a4 l0 b")

if (conlineas) imp.ver (imp.y2, 0,20,10,-20,-1)

imp.linea ("v3");

Introducción al programa / 36
function concepto (que, ci,ri,niv,pos)

imp.tabla ("20 10 . 20")

if (que==1) {

imp (bas.con.cod(ci));

imp (); imp (bas.con.res(ci));

imp () ;imp.linea ("l2");

return

if (!que) {

imp (bas.con.cod(ci));

imp (bas.con._uni(ci));

imp (bas.con.tex(ci));

imp (bas.rcc.pref(ri)),"a5");

imp.linea

imp.linea("v2",1)

Pulsamos el botón Preliminar para ver el nuevo resultado, y obtenemos rótulos de


encabezado de las columnas, y hasta un parámetro (haga clic en el botón
Parámetros), que permite definir si queremos que salgan líneas verticales separando
las columnas o no, haciendo un simple clic de ratón sobre la línea del parámetro.

Cambiar cabeceras de informes


En general, casi todos los informes utilizan el mismo formato de cabeceras, pies,
márgenes, etc. por legibilidad y presentación. Todos comparten uno o varios
programas de informe que no se han hecho para imprimirlos, sino para introducir los
mismos datos en todos lo demás informes. Haciendo cambios en un programa de
cabecera, las modificaciones afectarán a todos los informes que lo usen.

En la lista de informes predefinidos se incluye: "CABECERAS Y LIBRERÍAS\Cabecera


general"; cuya definición se encuentra en el archivo cab.xjs. Hay series de informes
que utilizan su propia cabecera por tener un formato especial, y ésta se encuentra
dentro de la carpeta correspondiente.

La función incluir( ) permite introducir el código de un archivo de programa dentro de


otro, en el punto en que se llama a esa función. En la definición de cualquier informe
se puede incluir cualquiera de las cabeceras, librerías con funciones de propósito
general, otros programas para que se ejecuten secuencialmente, etc..

La cabecera estándar imprime por defecto, el título del informe y el número de página
al comienzo de cada página. Las cabeceras con gráficos contienen información de la

Guía rápida de usuario / 37


empresa y el logotipo de la misma. Si quiere utilizar las cabeceras completas en los
informes, tendrá que personalizarlas para que incluyan los datos de su empresa, los
datos que hay son sólo de ejemplo.

Para personalizar las cabeceras


Se hace incluyendo un estilo nuevo dentro de la definición de encabezados de las
funciones especiales paginicia() y pagtermina(), que definen las cabeceras y pies de
todas las páginas de cada informe. Estas funciones son especiales y se ejecutan
SIEMPRE al principio y al final, respectivamente, de la impresión de cada hoja. Es
decir, son zonas especiales para definir cabeceras y pies de página que se repiten en
todas las páginas con el mismo formato (claro que datos como variables, números de
página u otros pueden cambiar, como es habitual).

Haga clic sobre el nombre de archivo "cab" para abrir la ventana de Programa con el
del informe "CABECERAS Y LIBRERÍAS\Cabecera general"

Tal como están diseñadas las cabeceras y pies del archivo cab.xjs, puede ver que
admiten otras definiciones paginicia2() y pagtermina2() de modo que se puedan
añadir datos en cabeceras y pies, en cada informe. Tenga en cuenta que cada vez
que se hace una llamada a las funciones principales (paginicia), se anula la
definición de las añadidas (paginicia2).

Vaya a la definición de la función paginicia( ) e incluya al final una condición del tipo:
else if (estilo==30) {

...

Dentro puede poner el formato de tabla, las líneas, espacios y definiciones y datos que
quiera en su nuevo formato. Si utilizamos en cualquier informe que incluya esta
cabecera la definición: var estilo=30, se tomará este formato.

Parámetros de los informes


Seleccione uno de los informes de la primera carpeta (en las primeras están los
utilizados más comúnmente).

Abra la ventana del Programa de informe (haciendo doble clic sobre el nombre del
archivo, a la derecha del todo), y en las primeras líneas verá una lista de variables
definidas con la declaración var y a continuación un doble comentario de color verde,
con cuatro barras inclinadas "/ / / / "

Pinchando en el botón Parámetros de la ventana informes y procedimientos o


haciendo doble clic en la columna gris (.) a la izquierda de la lista de informes, se nos
muestra la ventana con la lista de parámetros definidos en el informe actual.

Esta ventana es sólo una forma cómoda de modificar las variables y rótulos de los
programas de informes, ya que también se podrían modificar directamente.

Lo primero que se observa es que todas las variables definidas EN ESTE PROGRAMA
con sus rótulos y valores, son de color negro en la lista de parámetros, y que están en
la parte superior de la lista. En cambio los que hay a continuación son del color

Introducción al programa / 38
morado de "datos en estructura" y pertenecen a otros archivos .XJS pero están
incluidos en el programa actual.

Si mostramos la columna Programa (que por defecto no se muestra), podemos ver en


qué informe está definido cada uno de los parámetros. Por ejemplo, vemos "preres1"
en las primeras líneas. La diferencia de colores que mencionábamos, sirve para
destacar que primero se muestran las variables definidas o redefinidas en el informe
actual, y después todas las que se incluyan al incluir OTROS programas de informes
con la función incluir( )

IM PORTANTE: Ahora podemos modificar parámetros de este informe, como pueden


ser: acumular o no auxiliares en partidas, o saltar de página en cada capítulo, y por
otra parte podemos hacer cambios en otros informes (en este caso en la cabecera
cab.xjs y la librería libcap.xjs, que incluye éste), teniendo en cuenta que los cambios
que hagamos también se manifestarán en los demás informes que incluyan la
cabecera o la librería.

Lección 5b: Personalizar y programar informes (2)


Como ampliación de la personalización de informes, tenemos otros casos y funciones
algo más avanzadas:

Modificar la numeración de partidas y capítulos


Si imprime un preliminar del formato por defecto de este informe, verá que la
primera columna por la izquierda es "Nº actividad" que no muestra ningún dato. Esto
es porque la numeración de cada actividad y capítulo está grabada en base de datos
igual que el Código de concepto o el Resumen. Naturalmente no tenemos que teclear
toda la numeración ni la primera vez, ni cuando cambiemos de orden o añadamos o
eliminemos partidas: hay una herramienta automática.

En ventana Parámetros generales > Numeración, podemos definir el formato y raíz de


la numeración deseada. La numeración de actividades es la más habitual porque
normalmente las partidas no se utilizan en más de un capítulo, pero si queremos
numeración con repetición, podemos usar la numeración de unidades de obra.

Teclee "##.##" en el campo Máscara de actividades, y pulse Monta numeración


automática. Si en la ventana principal mostramos la columna NºActividad, veremos
la numeración con el orden que tenemos en el momento actual y el formato de 2
dígitos para niveles de capítulos, un punto como separador y otros dos para partidas.

Si ahora creamos nuevas partidas, no tendrán numeración, o al mover una de


posición dentro del mismo capítulo, su numeración no será secuencial. Al hacer
cualquier cambio de este tipo tenemos 4 opciones:

1. Mantener la numeración porque nos interese compara con informes ya


impresos con esa numeración, aunque no sea consecutiva.

Guía rápida de usuario / 39


2. Introducir manualmente en el campo de ventana principal el número deseado
o modificar los existentes.

3. Recodificar el presupuesto con numeración automática. Esto sustituiría los


códigos de la base de datos por los números de actividad de los mismos.

4. Volver a pulsar el botón para renumerar el archivo completo (o una parte de él


si ponemos un límite a la profundidad en el campo correspondiente, o
especificamos un concepto desde el cual partir hacia abajo). La función
automática elimina todos los cambios manuales.

Si ahora lanzamos el informe de Cuadro de Precios de nuevo, verá impresos los datos
que se mostraban en la ventana principal.

Uso práctico del teclado

Introducción
Explicaremos aquí brevemente las acciones más útiles del teclado, así como algunas
herramientas particulares de la aplicación. dentro del funcionamiento estándar de
Windows:

F1, F2 ... F8 (teclas de función): Los botones la pie de las ventanas se activan
con las teclas de función. Muchas de las ventanas tiene 8 botones, que se
corresponden con F1-F8, los diálogos más habituales tienen dos, o tres, que se
activan con F1-F3 y algunas ventanas con varias filas de botones e incluso no
todos al pie de la ventana, funcionan con las teclas de función combinadas con
CONTROL y con MAYÚSCULAS. En cualquier caso, cada cotón existente en el
programa, lleva una pista que incluye la tecla que lo activa.

TAB: Para desplazarse entre los distintos controles y secciones de las ventanas
(es el estándar en Windows). Para desplazarse al control o sección de la ventana
siguiente. Combinando la tecla con MAYÚSCULAS, se desplaza en sentido
inverso. Dentro de la misma sección de controles, por ejemplo una fila de
botones, el movimiento se realiza con la FLECHAS DEL CURSOR.

Para desplazarse hacia la derecha y a la izquierda, respectivamente, cuando el


control en el que estamos situados es un conjunto de pestañas, se utiliza con
CONTROL+TAB, y para moverse en sentido inverso, la combinación
CONTROL+MAYÚSCULAS+TAB.

Como verá, en varias ventanas (ventana principal, ventana de mediciones, etc.), se


muestra una lista con los datos ya introducidos, por ejemplo la lista de líneas de
medición. El conmutador de ventana principal llamado Edición activa y desactiva,
bajo la lista de datos, una línea de edición que permite modificar los datos existentes
y añadir nuevos datos.

El comportamiento del teclado varía según que el foco (la posición actual sobre los
controles de la ventana) se encuentre en la lista o en los campos de texto de la línea
de edición.

Introducción al programa / 40
Con el foco en cualquier campo de edición:
ENTRADA EN LOS CAM POS: Siempre que entremos en un campo de edición, el
contenido de éste aparecerá seleccionado, para poder modificarlo por completo
directamente.

SUPRIM IR: En los recuadros de texto mantiene su función de borrar el carácter


posterior al cursor. Combinándola con CONTROL podemos borrar la selección
actual de la lista como si estuviésemos situados en ella, sin perder el foco del
campo de edición.

INSERT: En un campo de texto, no tiene efecto. Pulsando CONTROL+INSERT


podemos insertar una línea en blanco por encima de la posición actual.

IZQUIERDA y DERECHA (flechas del cursor):En el campo de edición, mueven el


cursor un carácter a la izquierda o la derecha respectivamente.

ARRIBA y ABAJO (flechas del cursor): Aunque tengamos el foco sobre el texto,
desplazan la selección en la lista hacia arriba y hacia abajo, sin cambiar de
campo.

INICIO y FIN: Mueven el cursor al principio del campo de entrada o al final del
mismo. Estas teclas combinadas con MAYÚSCULAS, seleccionan el texto desde el
punto actual hasta el inicio o el final.

RE.PÁG y AV.PÁG (avance página y retroceder página):Desplazan la selección


en la lista una página (conjunto de líneas que se ven) hacia arriba o hacia abajo,
igual que estando sobre la lista.

F9 (tecla de función): Permite utilizar una calculadora de campos alfanumérica


de fácil manejo pero de gran potencia, para sustituir expresiones, copiar
contenido de unas columnas en otras, realizar operaciones sobre múltiples líneas
de una sola vez, ejecutar cálculos con cualquier expresión...

Con el foco en cualquier lista de líneas:


SUPRIM IR: Elimina la línea o líneas seleccionadas, después de un diálogo de
confirmación.

INSERT: Inserta una línea por encima de la línea seleccionada.

IZQUIERDA y DERECHA (flechas del cursor): En este caso tienen el mismo


efecto que ARRIBA y ABAJO: desplazan la selección hacia arriba y abajo por la
lista.

INICIO y FIN: Mueven el cursor al principio o final de la lista. Combinadas con la


tecla de MAYÚSCULAS, realizan una multiselección de líneas desde la actual
hasta la primera o la última.

RE.PÁG y AV.PÁG (avance página y retroceder página): Desplazan la selección


una página hacia arriba o hacia abajo.

INTRO: Para facilitar la entrada continuada de datos en los campos de edición de


estas listas, la tecla INTRO tiene un uso especial: al pulsarla en un campo de
entrada cualquiera se da por terminada la entrada en ese campo y se pasa al

Guía rápida de usuario / 41


siguiente (como con la tecla TAB); cuando se pulsa en el último campo de la
línea, se da por terminada la línea entera, se inicia una nueva línea pasando el
foco al primer campo. En cambio, en el último campo de una línea, la tecla TAB
desplaza el foco al siguiente control de la ventana, que en general es la barra de
botones.

BARRA ESPACIADORA: En ventanas modales y los diálogos, la barra de ESPACIO


funciona como el INTRO, y siempre activa el botón que tiene el foco -el que está
marcado con un recuadro-, o sea, que equivale a Si o Acepta; y la tecla ESC
siempre anula un diálogo (equivale a Cancela). El movimiento del foco dentro de
la serie de botones de un diálogo se hace con las teclas del cursor.

Introducción al programa / 42
Controles habituales
Hay botones y controles comunes a la mayor parte las ventanas y diálogos del programa,
como en todas ellas tienen las mismas funciones, y los usuarios avanzados ya están
familiarizados con ellos, los explicamos en detalle solamente en este apartado, en
sentido de arriba a abajo.

Primera sección de ventanas y diálogos


Hay que distinguir entre dos clases de ventanas:

1. Las que muestran datos de un concepto (Texto, Términos, Gráficos...) o son


generales de la aplicación (Imprimir, Parámetros generales...)

En estas se muestran en la primera línea, los datos del conceptos actualmente


seleccionado: su icono de Tipo, Código y Descripción. Si no hay concepto
seleccionado, esta línea aparece en blanco.

2. Las ventanas de propiedades que muestran datos particulares de cada Tipo de


concepto (la ventana puede cambiar también dependiendo de la Clase de
concepto). Los controles comunes a todas las ventanas de propiedades como el
conmutador Modo Búsqueda , el botón seguimiento , el botón Repite, Nuevo y
otros, como la primera sección, se explican en el tema general ventanas de
propiedades

Botones de cabeceras de listas


Botón Exportación de la lista
En todas las ventanas que tienen listas de datos, y botones de cabecera de listas, se
muestra a la derecha de todos ellos (junto al borde de la ventana), un pequeño botón
sensible al ratón con el icono de un cuadrado con una flecha. Este botón permite
volcar a diferentes tipos de archivos (Excel, Notepad, Word, OpenOffice Calc)los datos
que se están visualizando actualmente en la pantalla, con el formato y orden de
campos que tiene en ese momento.

Este icono sólo aparece si se tiene instalada alguna de las aplicaciones a las que se

Controles habituales / 43
pretende exportar. Los programas Javascript que se utilizan para formatear en el
formato elegido la salida se encuentran en: "COLECCIONES ESPECIALES\MENÚS Y
CONTROLADORES\ CONTROLADORES"

Botones al pie de las ventanas


En la ventana principal (ya que en las ventanas de Propiedades, estos 4 botones tiene
otro funcionamiento):

Partiendo de la posición actual, en la que vemos una lista de


conceptos, y encima el código de su concepto ascendiente: al pulsar este botón, se
muestra en la lista de conceptos la descomposición del siguiente elemento
"hermano" del padre actual, es decir, se selecciona en la sección concepto padre, el
concepto que tiene una posición por debajo en la lista, si subimos al nivel superior.

Funciona de forma análoga al botón Siguiente, pero tomando el


elemento anterior al padre que tenemos en la lista de conceptos.

IM PORTANTE: Si cualquiera de estos dos botones se utiliza desde otra ventana que
no sea la principal, el desplazamiento Siguiente / Anterior (es decir subir o bajar por
la lista), en vez de realizarse sobre los padres de las lista que vemos en ventana
principal, se realiza sobre los elementos de la lista actual en pantalla.

Al accionar este botón se elimina el último código del camino


actual y se presenta como padre el código anterior. Si no existiera ningún código
anterior, se pone el código del concepto raíz (.) y no se puede ir más hacia arriba.

Cuando el concepto padre, no es sólo una secuencia de códigos que "profundizan" en


el árbol de conceptos, sino que hay búsquedas o listas de ascendientes, simplemente
se deshace el camino hasta el paso anterior al actual. Un acelerador de esta función,
es hacer clic con el botón derecho del ratón sobre cualquier concepto de la lista.

Al accionar este botón se posiciona como padre el concepto en ese


momento seleccionado en la lista de conceptos. Un acelerador de esta función, es
hacer doble clic sobre el concepto que queremos posicionar como padre.

Al contenido de la línea de Comandos se le añade el carácter '\' y el código del


concepto seleccionado.

Al pulsar este botón, aparece el diálogo Selección de informes que


muestra la lista de informes compatible con el concepto o línea que tenemos
actualmente seleccionada —en algunos casos será el último en el caso de tener
varios seleccionados, en otros la impresión podrá ser de toda la lista o de los
múltiples conceptos seleccionados: depende del informe—.

Los posibles informes que se muestran en el diálogo, están en la lista de la ventana


informes y procedimientos y se seleccionan con el siguiente criterio. Se muestran:

1º los informes cuyo nombre comienza con el nombre de la Clase del concepto (En el
Tipo Carpetas, por ejemplo, los "sql1*.xjs")

Ventanas del programa / 44


2º los nombres que comiencen con el nombre del Tipo (en el caso anterior, "car1*.
xjs")

3º los que comiencen con el nombre de la tabla del concepto (por ejemplo, "con1*.xjs"
se muestra con cualquier concepto, ya que todos pertenecen a la tabla "con")

Al accionar este botón se trasladan todos los conceptos o elementos


seleccionados a la posición seleccionada de la ventana principal del archivo paralelo,
si está abierto y con el modo Edición activo.

Las unidades de información unidas a los conceptos seleccionados que se trasladan,


dependen del estado en que se encuentren las opciones de la ventana Herramientas
> Modos Traslada...

Si se utiliza en una ventana que no sea la principal, tiene el efecto de trasladar la


información actual (textos, gráficos, mapas, configuraciones, etc.) de la ventana a la
ventana paralela del mismo nombre. Al trasladar, puede presentarse el siguiente
error:

Anula las modificaciones que se hayan hecho en la ventana o


diálogo desde que se abrió. En general, cualquier cambio queda grabado cuando se
abandona una ventana, de forma que si pasamos a una ventana distinta y volvemos a
la que habíamos hecho las modificaciones, al pulsar este botón normalmente no se
realiza ninguna acción (incluso puede estar desactivado), ya que no hay nada que
deshacer.

En ocasiones se muestra un diálogo con aclaraciones u otras opciones, además de


servir para confirmar la operación, como por ejemplo:

El botón Sí confirma la cancelación, se recuperan los datos originales antes de las


modificaciones y se pierden todos los cambios realizados desde la selección del
concepto.

Controles habituales / 45
En el programa hay estados por defecto originales para las
configuraciones que el usuario puede cambiar. Permiten recuperar un estado
"normal" o "de fábrica", tal como se utilizó el programa la primera vez, por si a raíz de
sucesivos cambios en iconos, rótulos, valores, cabeceras, etc. se ha llegado a un
estado incómodo o incorrecto.

Aparece siempre que hay listas de elementos (conceptos, informes,


tipos, rótulos, etc) y su orden es relevante, y permite cambiar de posición una o
varias líneas a la vez en la lista. La operación se realiza al pulsar el botón después de
multiseleccionar mediante ratón o teclado al menos 2 elementos de la lista, ya que
las líneas seleccionadas (y en el orden en que se han seleccionado) pasan a colocarse
encima de la última línea seleccionada.

Ventanas del programa / 46


La ventana principal
La Ventana Principal
Es la ventana a la que accedemos al hacer doble clic sobre el icono de la aplicación o
ejecutar el archivo .EXE del directorio de instalación, y representa el centro de la
aplicación. Desde ella nos moveremos por estructura de la base de datos que tengamos
abierta actualmente, a través de la estructura de posicionamiento o descomposición en
la que se organizan los contenidos de cualquier archivo de datos.

Su aspecto es el siguiente, y puede obtener más información sobre cualquiera de las


secciones de la ventana, pinchando en cada zona del gráfico:

Si quiere ver las posibilidades y funcionamiento del drag & drop (arrastrar y soltar), vea
el tema Abrir archivos.

La estructura de datos que vemos como ejemplo, es como un árbol de conceptos que
parten del concepto raíz (.) y pueden ser de varios Tipos (aunque los primeros niveles de
una base de datos siempre suelen ser organizativos, es decir, de tipo Carpeta. Los
niveles inferiores pueden estar compuestos por cualquiera de los tipos admitidos

En la estructura podemos subir o bajar (con los botones Superior/Inferior), movernos

La ventana principal / 47
horizontalmente — al mismo nivel — al concepto, con Siguiente/Anterior y seleccionar
uno o varios conceptos en particular. Esta ventana también nos permite presentar
listas de conceptos seleccionados por distintas características (una máscara de códigos,
por Tipo, por la clase de información asociada, precio...)

Mediante la función , podemos listar las referencias inversas de las


descomposiciones de conceptos, es decir podemos ver todos los conceptos que utilizan
en su descomposición el concepto seleccionado.

Otra posibilidad de navegar, es a través del panel de árbol que se muestra extendiendo
el borde izquierdo del campo de la lista de conceptos. Al desplegar las ramas y
posicionarnos en los conceptos del árbol, la lista se sincroniza mostrando el
seleccionado como código padre, y su descomposición en la lista.

Para ver las funciones de teclado y uso de la barra inferior de botones, vea el tema barra
de botones, o haga clic en la zona correspondiente del gráfico. Para ver las operaciones
sobre la lista de conceptos, y la información que contiene, vea el tema lista de
conceptos.

Peculiaridades de Menfis
Aparte de toda la documentación sobre las partes de la ventana, hay algunas
particularidades de controles, rótulos, etc. en algunas secciones:

Posición actual y Modo.- A la derecha del todo aparece el presupuesto total de la Fase,
para tenerlo visible en todo momento aunque nos desplacemos por la estructura.
Además, a nivel de descompuestos, delante de este dato se muestra otro, en los casos
en los que el padre de la descomposición tiene costes indirectos. En este caso se
rotula: (<coste_padre> x <medición_padre>)

Abrir archivos.- Además de arrastrar un archivo con extensión .MEN sobre la ventana
principal, para abrirlo, un funcionamiento particular es para los archivos de la
versión 5: Si en el mismo directorio de un archivo que se abre, existe una serie de
archivos (archivos del mismo nombre que tienen un sufijo numérico o alfabético
como: obra, obra1, obra2... u obraD3, obraD31, obra D32...), entonces se propone
importar todos en uno solo (con el mismo nombre, acabado con el sufijo "_v8"), y cargar
cada archivo como una Fase (certificación).

El nombre de los archivos es importante porque las Fases se crean con el número de
serie del archivo, y si hay alguno que falta, se crean las intermedias (sin ningún
cambio en esas fases, claro).

Una tercera utilidad de arrastrar archivos sobre la ventana, es importar directamente


archivos en formato de intercambio FIEBDC-3. Arrastrando un archivo de texto con
extensión .BC3 se importa directamente.

Si ya existe el nombre como archivo Menfis, se presenta el diálogo:

Ventanas del programa / 48


Menús y barra de iconos

La barra de menús y de iconos


En la primera sección de la ventana — llamamos sección a cada zona de la ventana
dividida por un separador horizontal y las numeramos empezando por arriba, sin
contar el título o nombre de la ventana ni la barra de iconos —, se sitúa una barra
con los botones de tipo menú en cascada que despliegan los menús que nos permiten
acceder a las funciones de la aplicación. En la aplicación pueden aparecer más
opciones de menú, que se explican en la ayuda correspondiente.

También podrá ver por debajo de esta sección una barra de iconos que representan
las opciones más importantes de los menús. Esta barra se considera parte de esta
misma sección. Hacer clic en un icono es equivalente a la selección de la opción de
menú correspondiente.

Menús
Vea el tema de módulos, para ver las opciones que incluye su versión. en la ayuda
en línea puede hablarse de herramientas y opciones que su versión no tiene.

El Menú Archivo despliega opciones referentes a manejo de archivos

El Menú Concepto muestra opciones referentes a información de la base de datos


actual

El Menú Proyecto despliega opciones referentes a búsquedas, impresión e


información de toda la base en conjunto, una de las ventanas importantes es la de
parámetros generales, que contiene configuraciones particulares para la base de
datos actual; esos datos cambiarán en otras bases

El Menú Herramientas muestra opciones referentes a traslados de información,


permisos y herramientas; la ventana más destacada es la de opciones, que contiene
datos e información referente al programa: no cambiará al cambiar de base de datos

La ventana principal / 49
El Menú Marcadores permite gestionar los marcadores (como los de las páginas de
un libro) que se pueden poner en distintas partes de la base de datos

El Menú Ventanas muestra opciones referentes a la distribución y tamaño de las


ventanas abiertas

El Menú Ayuda despliega entradas a este sistema de ayuda en línea

Como es habitual en Windows, puede acceder a las opciones del menú con el
teclado, manteniendo pulsada la tecla ALT y la tecla correspondiente al carácter que
se encuentra subrayado en la opción de menú. Por ejemplo, ALT+A despliega el
menú Archivo. A continuación pulsamos la tecla que corresponde a la opción que
quiere seleccionar (por ejemplo F para finalizar el programa).

En la parte derecha podemos visualizar, en todo momento, la cantidad total del


presupuesto. Si pinchamos sobre dicha cantidad podemos acceder a las opciones
Recalcular totales y Ventana ajusta presupuesto, ambas explicadas en apartados
posteriores.

Barras de herramientas o iconos

Al hacer doble clic en el espacio libre a la derecha de los botones de la barra, se abre
la ventana Personalización de la barra de herramientas, y es un atajo a la opción de
menú correspondiente: Herramientas > Barra de herramientas...

Ventanas del programa / 50


Si pulsamos con el botón derecho del ratón sobre ella nos aparecerá un menú
contextual, donde podremos elegir cual de las cuatro barras de herramientas
disponibles queremos mostrar. Además también podemos elegir la opción de
configurar la barra activa.

Algunos botones de la barra de iconos también tienen menús contextuales (igual


que otras zonas de la ventana, como los campos de edición, las listas, los iconos de
tipos, etc.) accesibles con el botón derecho del ratón. Se muestran menús
contextuales en los botones Importa y Exporta: los submenús correspondientes a las
opciones de menú.

Al colocar el puntero del ratón, sin pulsarlo, sobre cualquier icono de la barra
durante más de un segundo, aparece un rótulo descriptivo o pista de la acción que
tendrá lugar al hacer clic en el botón.

Cantidades calculadas y bloqueo de fases


A la derecha de la pantalla hay dos conmutadores excluyentes mutuamente
para calcular cantidades de todo el proyecto y mostrarlas en línea de cada uno de los
conceptos. El cálculo se realiza al pulsar el conmutador y sólo se mantiene mientras

La ventana principal / 51
permanecemos en la misma fase, y no cambiamos el modo de Edición o modificamos
algún dato. En cuanto se produce una de estas acciones, se borran las cantidades
que aparecen en las columnas C.Calculada y C.Acumulada para cada línea.

A nivel de partidas, las cantidades generadas por CP (calcula cantidades parciales en


la fase actual), y CO (calcula cantidades a origen en la fase actual), coincidirán con
la medición a origen y parcial. Los datos interesantes están a nivel de simples, que
acumulan las cantidades de partida multiplicadas por el rendimiento en cada línea.
Lógicamente, las cantidades de las descomposiciones que aparecen muchas veces,
tendrán todas los mismos datos.

A la derecha del todo aparece un botón que puede mostrar dos estados: Bloquea
/desbloquea fase, y nos permite cambiar el estado de bloqueo por Fases.

Información de Fase, ámbito y modo

Fase, ámbito y modo


Esta sección se encuentra bajo la barra de iconos, y contiene los controles del
programa para gestionar múltiples fases de obra dentro del mismo archivo
(certificaciones), y múltiples ámbitos de precios, para mantener múltiples
presupuestos calculados simultáneamente con distintos precios por concepto.

El botón Fases , abre la ventana de gestión de Fases. Tanto esta ventana como la
Ámbitos, afectan al contenido y recálculos de todo el archivo, por lo que las opciones
de menú que acceden a estas dos ventanas están en el menú Proyecto.

Para ver la utilización de un archivo con múltiples certificaciones o fases de obra,


vea el tema Las certificaciones.

El botón Ámbitos , abre la ventana de gestión de Ámbitos que funciona de forma


similar que la de fases: las flechas que hay a continuación permiten desplazarse por
los definidos, y a continuación de las flechas se rotula el nombre que se le ha dado a
cada uno de los Ámbitos.

Las flechas Primera , Última , Anterior y Siguiente , en ambos casos sirven


para desplazarse cómodamente por la lista de todas las fases y ámbitos. A
continuación se rotula el nombre de la fase y ámbito actualmente seleccionados y de
los cuales se está mostrando los datos en la lista de conceptos.

IM PORTANTE: Dentro del presupuesto que podemos ver en esta ventana principal,
solamente hay dos datos dependientes de las FASES: la Cantidad que hay en cada
una de las relaciones entre conceptos y el Precio de cada concepto. Dependiente de
ÁMBITO solamente es el Precio. Es decir, en todas las fases tenemos la misma
estructura de carpetas y los mismos conceptos en los mismos lugares, pero en cada

Ventanas del programa / 52


fase puede haber una Cantidad y un Precio distinto para cada concepto (a todos los
niveles de profundidad).

Distintas Cantidades en varias fases se suelen aplicar a partidas de obra, y distintos


Precios en varios ámbitos a los simples que descomponen esas partidas (se utilizan
para expresar revisión de precios a lo largo de las fases, distintos precios por C.C.A.A.,
distintas relaciones en control de coste...)

Los Precios que cambian pueden ser en conceptos simples (sin descomposición), se
muestran en las líneas de conceptos en color verde cuando el concepto tiene
múltiples precios, y sus conceptos padres también, ya que su precio depende de
aquel. También se puede asignar ámbitos de ruptura[****]a conceptos
descompuestos, permitiendo Menfis calcular el importe del concepto con este nuevo
precio, sin utilizar el precio definido en el descompuesto. Cuando se realiza esta
acción sobre los precios, siempre aparece una R a la izquierda de el precio indicando
que éste es de ruptura.

A continuación, y antes del conmutador Edición, un índice, nos da el número total de


elementos mostrados en la vista actual, y si tenemos seleccionadas una o varias
líneas, el orden de la/s seleccionada/s.

Modo de utilización del archivo:


El conmutador

Al abrir un archivo, tenemos por defecto desactivada esta opción, de esta forma no
podemos modificar la información. Al pulsar el selector se activa el modo Edición
abriéndose campos especiales de edición debajo de la lista de conceptos.

Podemos hacer que al abrir archivos que ya existan, aparezca el conmutador de


edición activo, marcando esta opción en la ventana de opciones de Menfis.

Si no tenemos permiso de escritura del archivo, al intentar activar el modo de


edición el sistema nos presentará un diálogo de mensaje y nos negará el permiso de
edición.

La ventana principal / 53
Al crear un archivo nuevo, en cambio, se presenta por defecto con el modo de edición
activado.

Si un archivo está protegido contra edición a través de una clave de acceso, la


palabra edición de la ventana principal aparecerá en color rojo.

Búsqueda rápida y padre actual

Búsqueda general
En primer lugar, en el lado izquierdo de esta sección, se encuentra el acceso a la
ventana de Búsqueda general a la que podemos acceder si pinchamos sobre la
palabra Búsqueda.

Después de esta palabra, tenemos un botón desde el que podremos elegir el tipo y
clase de conceptos a buscar. A continuación, aparecen dos campos de edición en los
que podremos definir un código o una máscara de códigos de búsqueda, así como una
descripción o máscara de descripción que buscará en el campo resumen.

A la derecha de estos campos de edición se muestran los botones (ejecutar


búsqueda) e (histórico de búsquedas) que nos muestra una lista con las últimas
búsquedas realizadas.

Padre de los conceptos actuales:


La parte derecha de esta sección de la ventana principal, muestra el recorrido que
seguimos durante la navegación. Mostrando en última instancia, el concepto padre
de los conceptos visualizados en la ventana.

Si pasamos el cursor por encima de cualquiera de los códigos veremos que dicho
código cambia de color y un pequeño texto nos indica de que concepto se trata. Los
códigos de este historial actúan como accesos directos al concepto en cuestión, de
forma que si pinchamos sobre cualquiera de ellos automáticamente entramos en
dicho concepto.

Las flechas intercaladas entre cada código del historial nos muestran una lista de los
conceptos contenidos en dicho nivel. Dentro de esa lista se encuentra, obviamente,
el concepto mostrado en el historial y éste es mostrado en negrita para diferenciarlo
del resto. Estos listados también actúan como accesos directos, de modo que si

Ventanas del programa / 54


seleccionamos cualquiera de los códigos o resúmenes que ahí aparecen accedemos a
dicho concepto.

Información del concepto padre

Concepto padre del nivel actual


El padre se define como el elemento superior en el orden jerárquico y con el cual
guarda relación el elemento seleccionado. Puede ser de tipo árbol jerárquico o lista de
conceptos. Se presenta un rótulo: Tipo, Código · Unidad · Resumen Precio.

Botones de cabecera de la lista

Los botones de cabecera de la lista


El mecanismo de los botones de cabecera es muy potente y versátil, y por esto mismo
permite una gran variedad de posibilidades de uso. Representa la cabecera del campo
que contiene las líneas de conceptos.

El manejo y posibilidades que se describen a continuación sobre éste tipo de


controles, son aplicables a cualquier ventana donde aparezcan listas de elementos
con múltiples campos.

REDIMENSIONAR
Los botones son redimensionables sólo mediante el ratón, pero pueden hacerse
desaparecer y aparecer también mediante ciertas opciones de menú contextual.

Este puntero se muestra cuando situamos el ratón en la separación entre dos


botones. Cuando se encuentra en este estado, podemos hacer clic y arrastrar hacia
izquierda o derecha la separación y así cambiar de tamaño el botón que está a la
izquierda. Todos los botones que quedan a la derecha se redimensionan

La ventana principal / 55
proporcionalmente en el espacio que queda.

Al hacer doble clic teniendo el cursor de ésta forma sobre una de las separaciones
entre botones, el campo de la izquierda se ajusta al contenido más largo del mismo.

PERSONALIZAR (mostrar y ocultar)


Para hacer desaparecer un botón, basta con arrastrar su borde derecho
(manteniendo el botón izquierdo del ratón pulsado) hasta o por encima del borde
izquierdo del botón; cuando soltemos el ratón, dejará de visualizarse.

Los botones pueden mostrarse u ocultarse, y cambiar de orden entre ellos. Su orden
de defecto es el que se describe en el siguiente tema: la lista de conceptos, pero dado
que el usuario puede definir su propia estructura de base de datos, ni el orden ni los
campos son estáticos.

MENÚ CONTEXTUAL
Haciendo clic con el con el botón derecho del ratón se muestra un menú contextual
en cada uno de los botones; todos ellos contienen las siguientes opciones:

Ordenar: Hay tres funciones para ordenar, que se explican más abajo.

Buscar: Busca una cadena de texto en el campo sobre el que se accione, entre la
lista de conceptos o relaciones mostrados. El diálogo que se muestra, permite buscar
una cadena de caracteres cualquiera comenzando desde el inicio, desde la selección
en la lista hacia abajo o hacia arriba.

Reemplazar: Acepta dos rótulos separados por un espacio en blanco, siendo el


primero el que hay que reemplazar, y el segundo el nuevo. Si cualquiera de los dos
contiene espacios en blanco, se debe teclear entre comillas. CUIDADO, No se avisa

Ventanas del programa / 56


de cuántos cambios se han realizado, ni se pide confirmación. Es posible que en la
pantalla no se muestren los cambios realizados hasta que movamos la lista o
cambien los conceptos.

Calcular totales: Se puede aplicar a los campos que tienen datos numéricos, y
muestra un diálogo con tres columnas: Columna, Total y Selección, que actúa como
una calculadora, sumando todos los campos numéricos que se muestren
actualmente en la ventana (no se suman las columnas que tienen datos pero no se
estén visualizando).

Lee estado de defecto: Como se explica al comienzo de 6ª sección ventana principal


(líneas de conceptos) , dependiendo de la posición en el árbol de conceptos, o de la
forma de visualización, se tienen distintas configuraciones, pues bien, cada una de
ellas tiene un estado predefinido (aparecen ciertos botones con un tamaño
determinado), de forma que podamos recuperar siempre que hagamos cambios, un
estado con buena apariencia. Tendremos cinco configuraciones y cinco estados de
defecto (A-E), que se describen en detalle en la siguiente sección líneas de conceptos

Anchos proporcionales: Establece una proporción para cada botón que se ve, en
función de la longitud de contenido, y ajusta todos proporcionalmente.

Selector de campos: Abre el diálogo Selector de campos para indicar que columnas
se muestran en la lista y cuales quedan ocultos.

La ventana principal / 57
M ostrar y ocultar campos: Tiene la misma funcionalidad que el selector de campos,
pero aquí los nombres de las columnas se muestra en forma de submenú, en el que
se seleccionarán las columnas a mostrar u ocultar.

Ventanas del programa / 58


ORDENAR LOS DATOS
Estas funciones se activan haciendo clic con el botón izquierdo del ratón sobre los
botones. Estas funciones son para cualquier campo de lista del programa, no sólo
para la ventana principal.

Cuando vemos líneas de conceptos en cualquiera de las formas posibles — es decir:


descomposiciones en el árbol de conceptos, lista de conceptos, lista de relaciones o
lista de padres —, pinchar sobre los botones tiene el efecto de ordenar la
visualización de esas listas, de forma que por cada pulsación alternativa, pasa
sucesivamente por los estados:

que indica que está ordenado de forma ascendente, descendente o sin orden (es
decir, con la ordenación por defecto, que es mediante el código), respectivamente.

El menú contextual tiene tres opciones de ordenación que se corresponden con la


pulsación sucesiva del botón que acabamos de ver.

IM PORTANTE: Una función muy cómoda y potente para ordenar, consiste en que
podemos ordenar por más de una columna, según el orden en que las pulsemos, por
ejemplo: Al pulsar ordenación ascendente en la columna Resumen, y después en
Fecha, la subordenación dentro de las fechas que fuesen iguales, sería la el
Resumen alfabéticamente. En cambio, si pulsamos Resumen otra vez, ordenará por
los resúmenes, y dentro de los que sean iguales, por orden de fechas.

OTROS ESPECIALES:
Botón Exportación de la lista tiene el funcionamiento que se explica en las ventanas
de controles habituales.

Algún botón se puede utilizar con una función distinta, por ser una columna
especial. En concreto, la columna Info, abre la ventana Características, ya que no es
una columna editable mediante un campo al pie, ni interesa su ordenación.

Mediante la ventana Valores, podemos definir nuevos campos numéricos no


existentes en la base de datos, que podemos mostrar en la posición que queramos.

Panel de búsqueda en árbol

Panel de búsqueda en árbol


Accesible desde el menu Proyecto en la opción Ventana de navegación en árbol..., o
bien arrastrando el control separador vertical de la lista de conceptos de la ventanas
principal . La primera opción nos abre una ventana nueva con el árbol del
presupuesto.

La ventana principal / 59
El separador redimensionable permite repartir el espacio central entre la lista de
conceptos y el árbol jerárquico. Presenta la estructura del archivo en forma de árbol,
donde podemos abrir y cerrar ramas de forma idéntica a como lo hace el Explorador de
Windows, y manteniendo el mismo aspecto.

Cada vez que nos posicionamos sobre cualquier tipo de concepto, la ventana principal
se sincroniza con ese de concepto, de forma que podemos movernos por toda la base
de datos, de forma jerárquica visualmente.

Los conceptos de Tipo Carpeta que son de Clase Búsqueda, no muestran en el árbol la
descomposición de esa búsqueda, ya que esos conceptos no están realmente colgados
de la carpeta.

Ventanas del programa / 60


Lista de conceptos

La lista de conceptos
Es una lista con barra de desplazamiento vertical, que forma columnas de campos
debajo de los botones de la sección anterior. La lista que se muestra puede ser de
varias clases, conceptualmente:

Dependiendo del icono que tengamos en la columna Tipo, los conceptos pueden ser de
varias clases:

Lista de relaciones
Es el caso más habitual en cualquier base de datos, ya que nos da la estructura
jerárquica de la misma. Por ejemplo, un concepto de tipo Carpeta tiene entre sus
descendientes algunos conceptos de tipo Varios. El icono de Tipo de los hijos,
aparecerá una pequeña flecha indicando que en ese momento los datos que
vemos son de conceptos que tienen una RELACIÓN explícita con el concepto padre.

Lista de conceptos
Cuando un concepto de tipo Carpeta tiene una búsqueda asociada, los elementos de
la base buscados pueden ser simplemente una lista de conceptos, sin ninguna
propiedad especial de relación.

Lista de padres
Es también una lista de relaciones, ya que se trata de varios conceptos que se
relacionan con uno sólo que es el que nosotros seleccionamos. Los conceptos de tipo
búsqueda que dan como resultado el concepto que hemos seleccionado, no aparecen
aquí como padres.

IM PORTANTE: El formato en que aparecen las columnas de datos de la lista,


dependen sobre todo de dos aspectos:

1. En la primera pestaña de la ventana Propiedades de los conceptos de Tipo


Carpeta, se puede definir la característica Doble altura, que permite que sus
hijos (virtuales si es una búsqueda, o reales) se muestren con unos iconos y
tamaño de letra del doble del tamaño habitual.

La ventana principal / 61
2. En esa misma sección podemos definir un formato predeterminado de botones de
cabecera, es decir. los campos que se muestran en el nivel que estamos viendo,
y con qué tamaño cada uno. Aparte de estas configuraciones predefinidas, por
supuesto, podemos ver una configuración que será la de defecto: la que nosotros
podemos poner a mano en cualquier momento.

Control de la lista con el ratón


Dentro de esta sección de la ventana principal, el ratón tiene las siguientes
funciones (equivalentes a las funciones de los botones al pie de la ventana):

Clic izquierdo
Selecciona el concepto sobre el que se encuentra el puntero del ratón.

Doble clic izquierdo


Posiciona como padre de la lista el concepto sobre el que se encuentra el puntero del
ratón. Equivale al botón Inferior teniendo seleccionado el concepto actual.

Clic derecho
Posiciona como padre de la ventana, el último código de la línea de posición actual, y
muestra la lista de descomposiciones con el concepto padre actual seleccionado (si
pertenece a esa lista). Equivale al botón Superior

Columnas habituales
Tipo
Un icono representativo de cada uno de los tipos de concepto disponibles para
seleccionar en el diálogo Selección de tipo. El Tipo determina exactamente qué
propiedades puede tener un concepto, independientemente de la información que
pueda tener asociada (textos, gráficos, términos, etc.) que son comunes a todos los
Tipos.

Ventanas del programa / 62


El Tipo de defecto es Carpeta, es decir, al crear un concepto introduciendo el código,
si no especificamos el prefijo de Tipo, se tomará como que lo deseamos de tipo
Carpeta; y asimismo, en la línea de comandos, no aparece el prefijo en este tipo de
conceptos.

El puntero del ratón muestra este aspecto cuando entra en la zona de la columna
Tipo, indicando que se pueden utilizar las funciones de arrastrar y soltar, y además,
las siguientes:

El doble clic con el botón izquierdo, abre la ventana de propiedades del Tipo o
Clase que muestre el icono.

El clic con el botón derecho muestra el menú contextual de este campo, que es
el submenú Concepto actual del menú Concepto.

Se muestra cuando se arrastran conceptos por una zona no válida para soltarlos
(fuera de las ventanas del programa, sobre una ventana cualquiera, en un campo
distinto a un campo lista, cuando se están mostrando listas de conceptos, la ventana
destino no está en modo Edición, etc.)

Es la operación por defecto al cambiar de orden los conceptos dentro de la misma


lista de conceptos (en la propia ventana), o copiar conceptos borrando los de origen,
dentro del mismo archivo, utilizando la ventana paralela. No se puede mover a la
ventana alternativos del archivo actual (hay que utilizar el paralelo), ni a la del
paralelo, y tampoco mover conceptos a un archivo distinto en el paralelo.

Código
Código único por concepto, que tiene como máximo de longitud 18 caracteres.

Resumen
Comentario o descripción breve sin límite de tamaño.

Info
Es el único campo por el que no se puede ordenar estando en modo lista, árbol
jerárquico, etc. Muestra unos iconos más pequeños que los de la columna Tipo, que
dan idea de la información que tiene asociada el concepto. El icono asociado a cada
información se puede personalizar mediante la ventana Características del menú
Proyecto.

Asimismo, la forma en que el programa asocia automáticamente el icono, depende


de una definición de patrones que se realiza en esa misma ventana.

Esta columna funciona también como acceso directo a las distintas ventanas
asociadas de cada concepto. De modo que haciendo doble clic sobre ciertos iconos
como , , , , o accedemos a dichas ventanas.

Hacer doble clic sobre los iconos o tienen la misma función que pinchar sobre

Haciendo doble clic sobre cualquier otro icono de la columna se accede a la ventana
de propiedades del concepto seleccionado.

La ventana principal / 63
Otras columnas
Dependiendo de las necesidades de utilización de los datos de la base, se mostrarán
otros campos más, que hacen referencia a más información de conceptos o
relaciones. Se tienen hasta 32 posibles campos definibles en las cabeceras de
carpetas.

Dos novedades de Menfis 8 son los campos:

Marca
Nos permite colocar una marca para su posterior seguimiento en cualquier concepto
de nuestra obra. Podemos elegir de entre una serie de colores disponibles. Los
mensajes son personalizable si podemos modificarlos si seleccionamos la opción
M odifica etiqueta. Es posible desmarcar el concepto en cualquier momento
mediante la opción Eliminar seguimiento

%
Esta columna nos muestra el tanto por ciento que representa ese concepto dentro de
la relacion a la que pertenece. Es decir, si se trata de un capítulo, nos mostrará el
tanto por ciento que supone ese capítulo dentro del total del presupuesto. Si se trata
de una partida, indicará el tanto por ciento que supone esa partida dentro del total
del capítulo al que pertenece. Si se trata de un recurso, será el tanto por ciento que
representa ese recurso dentro de la partida a la que pertenece.

Otro campo bastante habitual:

Ventanas del programa / 64


Fecha
Internamente se almacena una fecha y hora de última modificación, por lo que a
este dato se le puede buscar cualquier otra utilidad. Es un dato asociado al propio
concepto, no a su relación con otro, por lo que todos los conceptos con el mismo
código, llevarán la misma fecha, claro.

Todas las fechas del programa se introducen con día, mes y año, aunque se puedan
visualizar con muy distintos formatos y se puedan introducir en algunos casos de
forma abreviada. Si a nosotros en un campo sólo nos interesa el mes, podemos
teclear "399" en el campo de entrada al pie de la columna, pero la fecha introducida
será la del primer día del mes: 1/03/99. Internamente todas las fechas se guardan
con el año completo (AAAAMMDD como por ejemplo, 19991129) para evitar el efecto
del año 2000, por lo que también se pueden introducir con ese formato en cualquier
campo fecha del programa.

Campos de edición

Edición de conceptos
Sólo aparece si tenemos activado el modo Edición. En ese momento, aparece debajo
de la lista de conceptos una serie de campos de entrada que corresponden a cada
columna editable de la lista (hay algunas que son informativas, y no se pueden
modificar desde aquí). En los campos se muestran los datos de la línea del concepto
seleccionado, para poder modificarlos o borrarlos.

En cualquiera de los modos que estemos viendo conceptos (relaciones jerárquicas,


lista de conceptos o de padres), podremos editar los campos Código, Resumen y Fecha,
que tenemos en el formato inicial de la ventana; dependiendo de los datos que
utilicemos, podremos visualizar y editar otros además.

Una forma rápida de acceder a la edición de cualquier concepto es pinchando con el


botón de rueda del ratón (presionando sobre la rueda del ratón) en el campo del
concepto que deseamos editar. Automáticamente el campo quedará claramente
diferenciado y el cursor se situará sobre el campo de edición para comenzar a
introducir datos.

La ventana principal / 65
Crear nuevos conceptos
1. Por defecto al insertar un nuevo código sin prefijo de Tipo y clase, se toma como
de Tipo Carpeta, siempre que estemos bajo en concepto raíz. Si estamos bajo una
carpeta a cualquier otro nivel inferior, se propondrá el Tipo Elemento, y por
último, bajo cualquier otro tipo de concepto, se propondrá el Tipo Recurso.

2. Sin embargo, si insertamos el código nuevo debajo de cualquier otra línea de


concepto, se supone que el tipo será el mismo que el de los "hermanos" que le
rodean, y se propone por defecto el mismo tipo que tenga la línea superior.

3. Con el nombre de tabla de la Clase de concepto, podemos crear cualquier


concepto nuevo sin utilizar el diálogo del menú Concepto, o el de creación de
nuevo concepto. Por ejemplo: ent·E001 crea el concepto de código E001 de Tipo
Entidad genérico (sin ninguna Clase especial), y en cambio, prv·E002 crea un
concepto de código E002, de Clase Proveedor (Tipo Entidad también).

IM PORTANTE: A efectos prácticos, cada clase de concepto tiene códigos


independientes, de forma que en el ejemplo anterior, también se aceptaría prv·E001,
aunque ambos son de tipo Entidad (uno el tipo genérico, que tiene código de clase=0
y el otro de clase=4).

4. En vez del nombre de la tabla que es más cómodo y fácil de memorizar, podemos
teclear un código con el formato <num_tipo>·<num_clase>·código. En el caso
anterior del proveedor, sería: 5·4·E001

5. Tecleando únicamente el símbolo más (+) como código, debajo de una línea de
concepto, podemos crear otro con el siguiente código al último utilizado en ese
Tipo. Esto tiene la utilidad de que no tenemos que acordarnos de cuál era o dónde
está en la base de datos.

Modificar conceptos existentes


1. El carácter coma (,) que se puede teclear también con la tecla del punto en el
teclado numérico -si se tiene configurado adecuadamente el separador
numérico de Windows-, copia el contenido del mismo campos que hay en la línea
superior de la lista, como si se tratase de unas comillas tipográficas.

Si la coma se introduce en el campo código, se duplica el concepto entero, donde


esto sea posible.

2. Para sobrescribir valores en cualquier campo NUMÉRICO (esto no incluye los de


fecha), basta con teclear la nueva cantidad y un espacio en blanco detrás; esto
borrará la cifra anterior.

Las dos herramientas siguientes tienen especial utilidad para trabajar con
certificaciones y sólo se aplican en el campo Cantidad (para mediciones y
rendimientos):

3. El carácter igual (=) tecleado delante de un valor, ajusta la Cantidad de ese


concepto lo máximo que permitan los redondeos, para que su Importe sea el valor
introducido (es decir, lo que tecleamos en el campo Cantidad es el Importe que
queremos).

4. El carácter porcentaje (%) tecleado delante de un valor indica que tome como

Ventanas del programa / 66


valor el porcentaje especificado en el mismo concepto en el archivo paralelo o si
no se tiene abierto un archivo paralelo y estamos trabajando en una fase o
certificación, toma el valor que tiene ese concepto en la fase 0 o fase de proyecto.
Esto es de gran utilidad cuando se editan múltiples fases, ya que se puede partir
de las mediciones de la Fase anterior o de las del proyecto inicial.

Cambiar el tipo o clase de concepto


Pinchando sobre el icono ubicado a la izquierda de los campos de edición, accedemos
a la ventana de selección de tipo y clase, desde la cual podemos cambiar el tipo y
clase del concepto actualmente seleccionado.

Barra de botones al pie

La barra de botones

En todas las ventanas ocupan una o dos filas en la parte inferior de la ventana o
diálogo. Los textos siempre van acompañados de un icono que representa su función,
haciéndola más fácil de recordar. Al permanecer sobre el botón 2 segundos se
muestra una pista (en inglés: tip) que puede ampliar el nombre que aparece en el
botón e incluye la tecla que lo activa. Para ver el uso del teclado, vea el tema Uso
práctico del teclado.

En todas las ventanas y diálogos de la aplicación, excepto ésta ventana principal, la


barra de botones termina por la derecha siempre en dos botones:

La ventana principal / 67
Que equivale a pinchar el botón con el aspa de la esquina superior
derecha de la ventana y aceptar los cambios que se hayan hecho en la ventana.

Que abre el sistema de ayuda en línea mostrando el lugar que


corresponde al sitio en que estamos.

El resto de botones de la barra son:

y Tienen la función habitual en cualquier


ventana del programa; los de Superior e Inferior también, utilizándose para subir o
bajar niveles en el árbol de conceptos.,

Abre la ventana de informes favoritos. Esta ventana se puede


alimentar desde la ventana de informes y procedimientos añadiendo o quitando
informes en función de las necesidades de cada usuario.

Al accionar este botón se trasladan todos los conceptos


seleccionados a la posición seleccionada de la ventana principal del archivo paralelo,
si está abierto y con el modo Edición activo. (Ver más abajo el botón <nombre>·2, la
ventana paralela).

Las unidades de información unidas a los conceptos seleccionados que se trasladan,


dependen del estado en que se encuentre la ventana Herramientas > Modos traslada
...

IM PORTANTE: Al trasladar, un error frecuente es que se traslade un concepto del


paralelo, y aparezca en la ventana destino con distinta Resumen, Fecha... Esto se
debe a que ya existía ese código en la base de datos destino y los Modos traslada
activos estaban configurados para trabajar así. Si le ocurre algo parecido, consulte el
tema Modos de Traslado de la guía de usuario.

Al accionar este botón se posiciona como padre, mostrando


ascendientes, el concepto en ese momento seleccionado en la lista, a diferencia de
Inferior que muestra los descendientes.

(la ventana paralela) La aplicación dispone de dos juegos de


ventanas idénticas en los que se puede situar el mismo o distinto archivo y que
permiten el traslado de cualquier información desde una ventana a su ventana
paralela, sin más que seleccionar la información que se desea trasladar y ejecutar la
correspondiente acción con el botón Traslada. Las ventanas de los dos juegos tienen
el mismo nombre y se diferencian una de la otra por el prefijo: M enfis1 las del
primer juego y M enfis2 las del segundo. Este nombre es el del programa, y el que
llevan detrás el de la ventana.

Esta función abre la ventana principal del archivo paralelo si no está abierta, o la
pone en primer plano si lo está. La noción de archivo paralelo es simétrico, las
funciones Menfis·1 y Traslada de las ventanas del juego 1 producen sobre las
ventanas del juego 2 el mismo efecto que las mismas funciones de las ventanas del
juego 2 sobre el 1.

Ventanas del programa / 68


Menú Archivo
Menú Archivo
El menú desplegable Archivo, situado en la barra de menús de la ventana principal, da
acceso a funciones relacionadas con el manejo de diversos archivos.

Abre archivo : Permite abrir un archivo con el formato de base de datos que maneja
el programa

Nuevo archivo : Permite crear un nuevo un archivo de base de datos, a partir de


una plantilla básica (es decir, con algunos tipos de conceptos, iconos, una
estructura básica si lo deseamos...)

Guardar como... : Permite guardar el archivo abierto actualmente, en otro lugar o


con otro nombre. Además de ésta opción, los diálogos estándar de Windows permiten
copiar, borrar y renombrar archivos directamente.

Cierra archivo: Cierra el archivo de base de datos actual, sin cerrar ninguna
ventana.

Administrar lista de origen de datos. Abre la ventana de selección de origen de


datos desde la cual podemos configurar la lista de ficheros disponibles. Es una
herramienta de gestión de archivos de referencia. Nos permite confeccionar un
listado con los archivos más consultados para acceder a ellos de forma rápida

Guardar como archivo comprimido (M EZ)... : Permite guardar archivos


comprimidos legibles directamente por Menfis 8. Los archivos ocupan mucho
menos.

Crear copia de seguridad : Permite generar una copia de seguridad del archivo con
el que estemos trabajando en ese momento.

Recuperar copia de seguridad : Nos da la opción de abrir cualquiera de las copias de


seguridad guardadas anteriormente, bien de forma manual o guardadas por el

Menú Archivo / 69
programa.

Enviar archivo por correo electrónico ... : Permite enviar directamente una obra
comprimida en formato .MEZ a través del programa de correo predeterminado del
sistema.

Guardar archivo para M enfis 7... : Guarda una copia del archivo actual en formato .
men compatible con la versión anterior.

Fin programa: Termina el programa cerrando todas las ventanas, incluida la


paralela.

Al final del menú se presenta una lista con los 16 últimos archivos de base de datos
que se abrieron, y en el orden en que se hizo, para poder cargar rápidamente las
más recientemente utilizadas.

Diálogo Abre archivo


Este diálogo estándar nos presenta todos los archivos de base de datos del tipo que
maneja nuestro programa y que se encuentren en el último directorio utilizado, como
es habitual.

Este sistema tiene la ventaja de que podemos seleccionar del menú histórico distintos
archivos para no tener que navegar por unidades de red. Por ejemplo, un archivo nos
permite abrir fácilmente otro que esté en su mismo directorio. Además, podemos tener
en el mismo momento, directorios de trabajo distintos para las dos instancias del
programa.

El archivo seleccionado se abre en modo de sólo lectura, con el modo Edición


desactivado, aunque esta opción es personalizable desde la ventana Opciones.

Si seleccionamos en la lista desplegable del diálogo, otro tipo de archivo, podemos crear
directamente un archivo nuevo e importar datos en una sola operación.

Ventanas del programa / 70


Al abrir un archivo de una versión anterior, se convertirá automáticamente el archivo,
al formato de la versión actual sin preguntar. Para conservar el archivo antiguo intacto,
se crea un archivo nuevo con el mismo nombre que el abierto, terminado en el sufijo
"_v7" (de versión 7).

Otra posibilidad para abrir archivos es arrastrar desde el Explorador de Windows un


archivo sobre la ventana principal, igual que hacer doble clic sobre ellos. Si el archivo
se encuentra en formato bc3 al arrastrar y soltarlo sobre la ventana de trabajo de
Menfis se nos mostrara el siguiente diálogo:

incluye los datos arrastrados en el nivel en el que estemos


ubicados en la obra.

Crea un archivo nuevo y en él sitúa los datos arrastrados.

Diálogo Nuevo archivo


Este diálogo estándar nos permite crear nuevos archivos de base de datos. No es
obligatorio poner la extensión del archivo propia del programa. El diálogo se abre en el
último directorio utilizado, aunque podemos teclear uno absoluto junto con el nombre de
archivo, o navegar con el diálogo hasta el directorio deseado.

Menú Archivo / 71
Si en el campo Herramientas> Opciones> Configuración> Plantilla (dir. público), hay
especificado un nombre de archivo, se utilizará una copia de aquel como archivo nuevo.
Haya especificada una plantilla o no, se crea el nuevo archivo y lo presenta con el modo
Edición activado, listo para modificar.

Para usuarios de otras versiones anteriores del programa que echen de menos el
diálogo de nombre de proyecto, vea el tema \Anexos\Preguntas frecuentes.

Tanto en éste diálogo como en el de Abre Archivo, se permiten las funciones estándar
de borrar archivos, renombrarlos y duplicarlos como copia en el directorio actual.

Al igual que la tecla INTRO, sirve para validar el nombre introducido y


crear el archivo.

Diálogo Guardar como


Este diálogo estándar nos permite duplicar el archivo de base de datos que tenemos
abierto actualmente en la ventana principal. El nombre del nuevo archivo se pide en el
diálogo y éste (la copia) se abrirá automáticamente, pasando a ser el actual. También
podemos elegir guardar el archivo en formato bc3, siendo esta acción similar a la
exportación realizada desde el menú Herramientas..., y manteniendo abierto el
archivos de trabajo actual.

Ventanas del programa / 72


guarda el archivo, pero no como copia de archivos sino compactando
(eliminando) los huecos libres de la B.D. como hace de forma automática el motor
Access. Por este motivo la copia de un archivo con el que se ha trabajado mucho y se
han borrado y añadido muchos registros, puede tener un tamaño bastante menor.

Si el nombre no incluye la extensión del archivo, se le añade automáticamente. Si no


se cambia el camino mediante el diálogo, se crea en el directorio actual.

Diálogo Guardar como archivo comprimido (MEZ)...


Este diálogo estándar nos permite duplicar el archivo de base de datos que tenemos
abierto actualmente en la ventana principal. El nombre del nuevo archivo se pide en el
diálogo.

Duplica el archivo, pero no como copia de archivos sino comprimido en

Menú Archivo / 73
formato Zip. Por este motivo la copia de un archivo Menfis a este formato se le cambia a
la extensión .MEZ

Si el nombre no incluye la extensión del archivo, se le añade automáticamente. Si no


se cambia el camino mediante el diálogo, se crea en el directorio actual.

Administrar lista de origen de datos


Es una herramienta de gestión de archivos de referencia. Nos permite confeccionar un
listado con los archivos más consultados para acceder a ellos de forma rápida.

Dentro de este listado, podemos asignarles diferentes nombres para cada archivo para
nuestra mejor comprensión, teniendo en cuenta que esos cambios no afectan al fichero
original.

En la columna fecha se muestra la fecha y hora de creación o última modificación del


fichero y en la columna ubicación podemos ver la ruta completa en la que se encuentra
nuestro fichero.

Abre una ventana de diálogo estándar para que seleccionemos el


fichero que deseamos incluir en nuestra selección de origen de datos

Excluye el archivo seleccionado de la selección de origen de datos.

Los archivos de la lista de origen de datos se visualizan siempre en la ventana paralela


Menfis 2. y podemos acceder a ellos de dos formas. La primera es, teniendo la ventana
de selección abierta, haciendo doble clic sobre cualquiera de los fichero que ahí
aparecen. El programa abrirá directamente la ventana paralela y en ella el fichero
seleccionado. La segunda forma de acceder a un fichero de la selección de origen de
datos, es pinchar sobre la flecha que hay en la parte inferior derecha de la ventana
principal.

Ventanas del programa / 74


De esta forma desplegaremos un menú que contiene el listado con los ficheros
disponibles en nuestra selección de origen de datos y simplemente tendremos que
pinchar sobre el que deseemos visualizar para que el programa nos lo muestre en la
ventana Menfis 2.

Desde aquí también se puede acceder a la ventana de selección de origen de datos para
su modificación, seleccionando la opción Administrar lista de origen de datos.

IM PORTANTE: Los ficheros seleccionados desde la función de origen de datos, siempre


se abren en la ventana Menfis 2, independientemente de si la selección de realiza
desde Menfis 1 o desde Menfis 2.

Enviar archivo por correo electrónico ...


Esta opción abrirá el programa de correo electrónico que tenga definido el usuario por
defecto en su máquina, y adjuntará al correo el archivo comprimido (mez) de la obra que
tiene abierta en ese momento.

Menú Archivo / 75
Menú Concepto
Menú Concepto
El menú desplegable Concepto, contiene opciones para abrir ventanas con información
adicional al concepto seleccionado en la lista de conceptos. Si la ventana que
solicitamos ya estuviera abierta, esta función la vuelve a colocar en primer plano.

Las dos primeras opciones permiten Copiar y Pegar la selección de conceptos en


la lista de la ventana principal mediante el portapapeles, para duplicar conceptos en
distintos sitios del mismo archivo de base de datos o a otro. Si el contenido del
portapapeles no es una línea válida, o no contiene nada, no se pegará nada.

Deshace y Rehace : Permiten deshacer la última acción realizada (o rehacer la


última acción deshecha).

Ventana deshacer: muestra el historial de acciones que se pueden deshacer o rehacer.

La aparición o no de las siguientes opciones depende de la configuración personalizada


definida en Opciones de Visualización:

Ventana Textos...: permite asociar y mantener textos extensos descriptivos del


concepto seleccionado. Esta ventana sólo admite texto plano, sin formato (TXT)

Ventana de Pliegos...: permite asociar uno o más pliegos a cada uno de los conceptos
existentes en la obra. Esta ventana admite Formato de Texto Rico (RTF)

Ventana Gráficos...: permite gesti onar los gráficos (vectoriales e imágenes) de todo
el archivo y acceder a todas las herramientas relacionadas con gráficos o cualquier
archivo externo que se quiera vincular a la información de la base de datos. Para
cada gráfico se puede tener una diapositiva, ver el gráfico con distintos niveles de
zoom y gestionar la asociación de gráficos y contenido multimedia en distintos
formatos al concepto seleccionado, o a un grupo de ellos.

Ventana Términos...: muestra los términos clave asociados al concepto actual, y

Menú Concepto / 77
permite gestionarlos (alta de nuevos, borrar y modificar).

Ventana Paramétricos...: permite crear (eligiendo entre varios lenguajes estándar),


definiciones de familias paramétricas, es decir, asociar a un concepto un programa
para crear conceptos similares entre sí, y seleccionables mediante opciones.

Ventana Valores...: permite crear nuevos campos numéricos asociados a conceptos,


para guardar más datos de los que se ofrecen. Mediante la configuración de
cabeceras, podemos mostrarlos en la ventana principal como cualquier otro de los
datos (Precio, Fecha, Cantidad...)

Ventana M ediciones...: muestra una ventana para gestionar desgloses de


mediciones utilizando incluso expresiones, y referencias a otras mediciones.

Ventana Certificaciones...: muestra una ventana similar a la ventana de


mediciones que permite, al igual que ésta, gestionar los desgloses de mediciones
para las certificaciones, además de ver simultáneamente la medición desglosada del
proyecto, e incluso trasladar líneas de medición desglosada del proyecto a la fase de
certificación activa.

Ventana Ajusta precio...: muestra una herramienta para ajustar los precios y/o
cantidades de una lista de conceptos, indicando el precio final que debe tener su
ascendiente.

y en la última sección se muestran los siguientes submenús:

Propiedades
Muestra un submenú con todos los Tipos de conceptos que tenemos definidos en el
programa, en función de los módulos adquiridos.

Ventanas del programa / 78


Nuevo concepto
Muestra una lista con el mismo número de opciones que Tipos de conceptos (si el
Tipo tiene varias Clases, la opción será otro submenú que nos ofrece todas las
Clases posibles). Al seleccionar cualquiera de ellas, se muestra un diálogo que tiene
tres campos de introducción de datos: Fecha, Código y Resumen, que se
corresponden con los datos de la ventana principal.

Al crearse el concepto, se abre automáticamente la ventana de sus Propiedades,


para que pongamos los datos necesarios, pero el concepto se da de alta descolgado en
la base de datos, no relacionado en la posición actual.

Concepto actual
Muestra un submenú con una serie de opciones que se pueden llevar a acabo sobre
uno o varios conceptos seleccionados. También se puede acceder a él como menú
contextual que se muestra con el botón derecho del ratón sobre la columna Tipo de
la ventana principal. Aparecerán AL MENOS, opciones para la modificación de tipos,
códigos, multiplicar conceptos, etc. pero pueden aparecer más opciones, ya que son
programables.

Menú Concepto / 79
Propiedades: Es equivalente a seleccionar la opción que abre la ventana
propiedades, en el submenú Concepto > Propiedades , y es contextual al
conceptos seleccionado, es decir, con cada tipo, se abrirá la ventana
correspondiente.

Cambio de tipo o clase: Muestra la lista Selección de tipo, mediante la que


podemos descartar los datos que tengamos como propiedades del concepto o
conceptos actualmente seleccionados (ya que se admite la multiselección), y
asignarle otras nuevas. Los datos genéricos como texto, gráficos,
Georreferencias, etc. son INDEPENDIENTES del tipo, y por tanto, no cambian.

Cuando tenemos datos particulares del tipo, y al cambiarlos los perderemos, se


muestra el diálogo de confirmación:

Cambia código: Permite modificar sólo el código del concepto actual, por el
introducido en el diálogo. También se permite cambiar códigos masivamente,
mediante la calculadora.

Ventanas del programa / 80


Cambia Descripción: permite modificar la descripción del concepto
seleccionado por otro deseado, introducido en el cuadro de diálogo.(Pendiente de
modificación por parte de los programadores)

Seguimiento: Nos permite añadir marcas a los conceptos para su seguimiento. Es


muy útil a la hora de realizar búsquedas. Podemos elegir de entre una serie de
colores predeterminados. Para asignar una marca a un concepto, simplemente
tenemos que seleccionarlo y, dentro de este menú, elegir el color de marca que
queramos asignarle. Se pueden aplicar multiselección para asignar la misma
marca a diferentes conceptos.Para eliminar alguno de los conceptos del
seguimiento, simplemente lo seleccionamos y elegimos la opción Eliminar
seguimiento.

Edición: Dentro de este submenú encontramos las siguientes opciones:

Duplicar Concepto: muestra un diálogo con el código del concepto


actualmente seleccionado, para que introduzcamos uno nuevo. Este nuevo
concepto será idéntico al actual y se dará de alta en la base de datos, pero
no en la relación que actualmente estemos viendo, sino como concepto
aislado.

Menú Concepto / 81
Sustituir concepto: es similar a Fusiona dos conceptos... del submenú
Utilidades de concepto. Sirve para ignorar la descomposición de un concepto
sustituyéndolo en los sitios donde aparece, por otro con la descomposición
del otro. En definitiva, une las relaciones SUPERIORES (padres) de ambos
conceptos en uno, manteniendo la descomposición de cada uno (a diferencia
de Fusiona dos conceptos...).

Para sustituir un concepto tenemos que tener seleccionados tanto el


concepto a sustituir como el concepto por el que lo sustituimos. El orden de
selección es muy importante ya que trasladará las referencias siempre del
primero que seleccionemos al segundo. Si no tenemos seleccionados ambos
conceptos se nos presentará el siguiente error:

Eliminar/Descolgar concepto: permite, bien eliminar el concepto de la obra


actual, o bien, eliminar las relaciones previas de un concepto, descolgándolo
de sus actuales padres pero manteniéndolo en la obra actual.

Ventanas del programa / 82


M over conceptos: permite modificar el orden de los conceptos sin alterar
sus relaciones previas. Para ello tenemos que seleccionar primero el
concepto o conceptos a mover y en segundo lugar el concepto de referencia
donde lo colocaremos. Esta opción nos colocará los conceptos a mover en la
posición inmediatamente superior a la del concepto de referencia elegido.

Utilidades de conversión mayúsculas - minúsculas: nos da a elegir entre


cambiar todo a minúsculas, todo a mayúsculas, o bien, Capitalizar. Los
cambios se pueden aplicar a los resúmenes o bien a los textos extendidos.

Copiar al portapapeles (FIEBDC-3): Nos permite copiar el concepto o


conceptos seleccionados en el portapapeles, de forma que lo podamos
compartir con otras sesiones de Menfis.

Pegar de portapapeles (FIEBDC-3): Pega el contenido del portapapeles en el


nivel en el que estemos situados en la obra.

Exportar selección a FIEBDC-3... nos crea un archivo extensión .BC3 con


todos los datos del concepto o conceptos seleccionados.

Importar de FIEBDC-3 en nivel actual... Abre una ventana de diálogo


estándar en la que seleccionaremos el fichero bc3 con los datos del concepto
o conceptos que queremos incluir en el nivel en el que nos encontremos
actualmente.

M odificar formato: Dentro de este submenú encontramos una serie de opciones


como son:

Cambio de icono

Cambio de color de texto

Menú Concepto / 83
Cambio de color de fondo

Quitar formato de color (texto y fondo)

Todas ellas modifican el formato del concepto seleccionado independientemente


de su tipo. Los cambios no afecta a las propiedades del concepto.

Ventanas asociadas: Este submenú nos permite acceder a todas las ventanas que
puedan contener información del concepto seleccionado, como son: Ventana Textos,
Ventana Valores, Ventana Términos, Ventana Gráficos y Ventana Paramétricos.

M arcar como terminada...: Sólo se aplica a conceptos que no sean de tipo carpeta, y
que no pertenezcan a la fase inicial del archivo (proyecto). Cuando se manejan
múltiples fases para certificar, sirve para marcar la fase de finalización de las
partidas. En el campo Cantidad del concepto marcado aparece a la izquierda una
letra "T" en esa Fase y las posteriores.

Enviar por correo electrónico: Nos permite generar un fichero .bc3 o .bc3
comprimido, para enviar una solicitud de oferta por una partida o grupo de partidas.
Una vez elegido el formato Menfis generará dicho fichero y lo incluirá en un correo
electrónico dentro de nuestra aplicación de correo predeterminada, donde sólo
tendremos que incluir la dirección del destinatario. Podemos establecer una
dirección diferente a la del envío para las respuestas a estas solicitudes, desde las
opciones del menú herramientas.

Imprimir concepto... Abre el diálogo Selección de informes que muestra la lista


de informes compatible con el concepto o línea que tenemos actualmente
seleccionada —en algunos casos será el último en el caso de tener varios
seleccionados, en otros la impresión podrá ser de toda la lista o de los múltiples
conceptos seleccionados: depende del informe—.

Ajusta importe... Nos permite ajustar el precio de un capítulo suelto. El


funcionamiento de esta ventana es idéntico al de la ventana ajusta presupuesto,
con la salvedad de que en este caso la aplicación controla que los conceptos a
modificar no estén repetidos en ningún otro capítulo de la obra, y si lo están no
efectúa modificaciones sobre ellos. Otra diferencia es la cantidad que aparece entre
paréntesis en la columna presupuesto, que nos indica qué importe del total
correspondiente al concepto en cuestión es susceptible de ser modificado para lograr
el objetivo.

Utilidades de concepto: Muestra una lista de herramientas, relacionadas sólo con


el manejo de conceptos individuales o por grupos. Casi todas las opciones de este
submenú son programas de JavaScript:

Fusiona dos conceptos...: Permite eliminar un concepto, y tomar en el


árbol de estructura de conceptos todas sus referencias superiores e
inferiores, para relacionarlas con otro concepto. Ejemplo:

Tenemos una partida de obra A, que se encuentra en el capítulo 06 y en el


07, con una descomposición de 3 recursos MO1, MO2, y MAT3. Llevamos
desde una base de datos, otra partida B, que tiene una descomposición
distinta: MAQ1, y está bajo el capítulo 08, pero que es complementaria a la

Ventanas del programa / 84


partida A.

Para eliminar la B: seleccionamos en una lista de partidas como origen B, y


como destino A -o sea, multiseleccionamos en ese orden-, y aplicamos la
opción Fusiona dos conceptos..., con lo que la única referencia que queda es
A, bajo los capítulos 06, 07 y 08, y con la descomposición de ambas (los 4
recursos).

Si no se tienen exactamente dos conceptos seleccionados para realizar la


operación, se muestra el aviso:

La siguiente sección contiene herramientas programadas, como por


ejemplo: Ordena descendientes por Tipo y Código, Poner en mayúsculas el
resumen del concepto actual, Recodificar la lista actual con códigos de
numeración correlativa... Todas estas herramientas están programadas en
JavaScript y además de ser personalizables por el usuario, se pueden añadir
las que se deseen para que aparezcan en el menú.

Padres...: es totalmente equivalente a pulsar el botón Padres de la ventana


principal, y muestra los ascendientes del concepto actual.

Ventana Deshace
Accesible desde las opciones Deshace... y Rehace..., pulsando en el diálogo de
confirmación el botón Historia. O bien, pinchando cualquiera de las dos opciones
manteniendo pulsada la tecla CONTROL. El diálogo se queda en primer plano, pero
permite seguir utilizando la aplicación...

El panel superior contiene la lista de tareas que se pueden deshacer, con una lista que

Menú Concepto / 85
va poniendo arriba las últimas acciones. En las columnas habituales podemos ver:
Tabla, Campo (nombres de tabla y campo de la base de datos a la que ha afectado el
cambio), Registro (el Código y Tipo·Clase de concepto en el que se ha hecho el cambio) y
Valor (el contenido antiguo del campo). La lista contiene muchas líneas en blanco
seleccionables, porque tiene un tamaño fijo, no es como otras listas dinámicas del
programa, para evitar que crezca sin control.

Hay otras columnas que se pueden mostrar como Tab, Cam (los nombres internos de
tabla y campo modificados), Num (el orden de la acción en la lista), e Ide (el identificador
de la relación o concepto Registro).

Valor Histórico
En el panel inferior, tenemos la pestaña Valor Histórico que contiene el contenido
completo del campo ANTES del cambio (es útil si es por ejemplo, un texto extenso, ya
que en la columna Valor del panel superior sólo aparecen una o dos palabras). Se
soportan las modificaciones en campos RTF y binarios, por que los contenidos
extensos podemos verlos aquí.

Valor actual
En Valor actual, podemos ver el cambiado, y es útil seleccionando todas las líneas de
las lista de historia, para poder ver los valores actuales.

Contenido
Esta pestaña sólo tiene información avanzada del estado de la memoria, entradas de
la lista, etc.

Ventanas del programa / 86


Botones al pie
Comienza a volver hacia atrás en las acciones realizadas (hacia
abajo) desde la parte superior de la lista.

Va realizando los cambios en sentido contrario: hacia arriba hasta


el comienzo de la lista, por todos los cambios que se han deshecho y están en color
rojo.

Cada paso deshecho se colorea en rojo, y el punto actual en el que se puede deshacer
o rehacer es justo la separación entre las líneas de color rojo y negro. Los cambios se
refrescan en pantalla en tiempo real o al cerrar la ventana, dependiendo del tipo de
cambio o ventana de la que se trate.

Es el que permite que se vayan guardando los cambios en la


historia, se puede desactivar por si al hacer muchos cambios se nota una
disminución del rendimiento del equipo.

Elimina todas las entradas de la lista de Deshacer (y Rehacer, por


lo tanto).

NOTAS:

Si hacemos un cambio que afecte a la existencia de otros (por ejemplo, eliminar


conceptos sobre los que habíamos hecho cambios), las entradas se eliminan de la
lista por ser imposible trabajar con ellas.

El historial de deshacer sólo se guarda para cada archivo, por lo que al cambiar de
archivo se limpia la lista.

Al realizar cambios masivos como importaciones, aunque el modo esté activado, se


desactiva el historial para que no penalice el rendimiento del programa.

Ventana Textos
Accesible desde la opción Ventana Textos...; permite almacenar asociado al concepto
seleccionado y presentado en la ventana, uno o varios textos extensos descriptivos en
formato ASCII — caracteres sin ningún formato especial —.

En la primera sección de la ventana se rotula el icono del Tipo de concepto actualmente


seleccionado y a continuación su Código y Descripción.

Es un simple texto, extenso, descriptivo y plano (ASCII), asociado al concepto. No tiene


límite de longitud. En todas las ventanas de propiedades se muestra este mismo texto
en el campo Descripción, para poder editarlo con mayor comodidad.

Menú Concepto / 87
A la derecha tenemos el botón Dicta que nos permite introducir el texto
mediante un sistema de captación de voz.

Ventana Pliegos
Se trata de uno ó mas textos en formato RTF (texto rico). Podemos almacenar varios
creando nuevas clasificaciones en la lista de textos clasificados. Estos textos ricos
tienen una peculiaridad importante: en la base de datos se almacena el contenido de
cualquier texto rico, también en formato ASCII, para poder realizar búsquedas por
términos, o poder imprimirla desde un informe.

Esta ventana consta de dos partes. La parte izquierda es un índice de las clasificaciones
de textos que tenemos, para poder acceder rápidamente a todos ellos, y nos da
información adicional sobre los que se utilizan y cuánto contenido tienen. La
información relacionada se puede encontrar en parte, en la propia ventana de
clasificaciones. Sobre la lista de clasificaciones tenemos los siguientes comandos:

Abre la ventana de clasificaciones, donde podemos crear nuevas


clasificaciones para textos y añadirlas a las ya existentes. Esta lista define los textos
múltiples de la pestaña Pliego de condiciones. Normalmente hay definido sólo uno por
defecto, con el código punto "." y el nombre "Texto genérico".

Superior e Inferior , recorren secuencialmente toda la lista de secciones.

los campos que se muestran son Código y Descripción, los mismos que hay en la
pestaña Actual de la ventana Clasificaciones; otra información adicional que no
encontramos en esta ventana, es el número de conceptos que utilizan cada uno de los
rótulos, y ésta se encuentra en dicha ventana. RTF(c), si la hemos mostrado con el
menú contextual, contabiliza el contenido en caracteres (bytes) -en texto rico-, para el
concepto actual, en cada una de las clasificaciones.

Ventanas del programa / 88


En la parte derecha se muestra una de las posibles clases o secciones de texto definidas
en la parte izquierda. En la primera sección se muestra el código y rótulo de la
clasificación, y a debajo el texto correspondiente al código y descripción seleccionados

Barra de herramientas de formato: Cuando estamos en modo Edición, aparece una


barra de herramientas para editar texto en formato RTF. Los botones permiten
modificar el texto para poner tabuladores, atributos de texto como negrita, colores,
distintos tipos de letra, listas con viñetas y numeradas, y muchos más—.

Con el menú contextual (botón derecho del ratón) podemos acceder a las mismas
herramientas que en la barra de herramientas, pero además tenemos otras opciones
como: buscar y reemplazar, seleccionar todo y con la opción Leer y grabar, aparece un
submenú con las opciones de insertar un archivo en formato RTF o TXT, equivalante a
la opción Importa texto, y otras como grabar texto, pegar como vinculado (pegado
especial) e imprimir.

El último botón de la derecha, Insertar objeto..., muestra el diálogo estándar para


insertar objetos OLE de aplicaciones registradas en su sistema. El objeto insertado es
directamente imprimible al imprimir el texto RTF desde cualquier informe, y es
modificable haciendo doble clic sobre él -aparecen los controles propios de la aplicación
que creó el objeto-.

Por último la ventana de edición donde podemos redactar nuestros textos y modificarlos
con las herramientas antes mencionadas.

Los cambios realizados en el texto se graban en la base de datos en cuanto pulsamos


cualquier control de la ventana, o cambiamos de ventana.

Botones al pie de la ventana


Los botones , y tienen las
funciones habituales en todas las ventanas.

Abre el Diálogo Importa texto.

Permite guardar el texto actualmente seleccionado en la lista


desplegable, en un archivo externo a la base de datos. El texto se graba en el archivo
especificado y se propone el directorio \TEMPORAL (se puede especificar un camino
relativo al mostrado o absoluto).

Menú Concepto / 89
Copia el texto actual a la Ventana Texto del archivo paralelo. Puede
producirse el siguiente error:

Pero si se puede trasladar, el contenido del Tipo de texto actual en la ventana Texto
del archivo paralelo es sustituido.

Ventana Valores
Accesible desde la opción Ventana Valores..., permite ampliar el número de campos de
diversos tipos que pueden estar asociados a un concepto, es decir, crear campos nuevos
personalizados por el usuario. Se admiten campos numéricos (de muchas clases: reales
en coma flotante, con diversos decimales y enteros), booleanos (verdadero/falso), fechas,
listas de opciones y textos.

Pestaña Valores:
En esta lista introducimos para cada concepto, el dato concreto para cada valor
definido en la pestaña Tipos de valores (si en esta pestaña tenemos alguna
restricción de Tipo y Clase, sólo se mostrarán los valores compatibles).

Ejemplo práctico:

Tenemos Entidades en nuestro archivo, pero necesitamos dos campos que no nos
ofrece la ventana de propiedades: un segundo correo electrónico (privado) y una fecha
de antigüedad.

En la pestaña Tipos de valores damos de alta los dos tipos de campos: "eleper" "C.E.
personal" y "fecant" "Fecha antigüedad"; cambiamos el tipo de a Texto y Fecha
respectivamente, y seleccionando los dos con el ratón, los asociamos al Tipo de
concepto entidad.

Ventanas del programa / 90


En la pestaña Valores, y teniendo seleccionados conceptos de Tipo Entidad en la
ventana principal, podemos introducir valores como si fuesen campos de la ventana
de propiedades: un texto como juan@ingra.es, o un número como 20031201 (formato
AAAAMMDD) que se convertirá en la fecha 1/12/03.

En modo Edición, al pie del campo Valor, se muestra un campo de edición para
introducir los datos de cada valor, pero además hay tipos de datos que se editan
haciendo doble clic sobre la línea del valor (es el caso de las listas, y los booleanos
verdadero/falso).

Para poner el mismo dato en uno de los valores en varios conceptos a la vez, podemos
utilizar el botón Repite, que actúa sobre la selección de conceptos que tengamos en
ventana principal.

Pestaña Tipos de valores:


Define los diversos Tipos de valores que podemos utilizar para todos los tipos y clases
de conceptos (cada valor concreto de uno de los tipos de valores es como un texto o un
gráfico relacionado: cualquier concepto puede tener). La edición de algunos campos
como Tip, TyC sólo es posible estando en modo Edición, por supuesto, y además
teniendo un elemento seleccionado.

Menú Concepto / 91
Con un Código y Descripción damos de alta los valores que necesitemos, y haciendo
doble clic en la columna Tip, también el tipo de datos que contendrá ese valor (por
defecto es booleano), lo que ofrece un diálogo con todos los posibles.

Haciendo doble clic en cada línea, en el espacio del campo TyC (Tipo y Clase),
también podemos filtrar que cada valor exista SÓLO para los conceptos de un Tipo ó
Clase concretos. Pero además, podemos realizar la selección para varias líneas
multiseleccionándolas, y esto también vale para anular la asociación de Tipo o Clase,
mediante el botón Cancela del diálogo.

El campo Rango de valor se utiliza para dar un subconjunto de valores, o una lista de
posibles valores a cada uno de los campos-valor definidos. Dependiendo del tipo de
valor, en el panel inferior Rango del valor seleccionado, aparecerán unas
posibilidades u otras:

En todos los valores numéricos se da un rango de 3 subvalores donde se puede


introducir un dato concreto (Mínimo, Medio y Máximo)

En los valores de Tipo Booleano y Texto, no hay rango (ni se puede definir). En los
booleanos el defecto es siempre 'Si'.

En los de tipo Lista, el rango se define para cada lista, poniendo las opciones
separadas por barras verticales (|), comenzando con una barra si queremos dar la

Ventanas del programa / 92


posibilidad de dejar el valor en blanco. Los datos que se van asignando a cada valor
para cada concepto, están asociados al número de orden de la lista, con lo que si
definimos una lista con los valores A|B|C|D, y después de utilizados, borramos el
'A', todos tendrán un dato desplazado (el que tenía C, será ahora D).

Otra utilidad de esta pestaña, es que haciendo doble clic sobre cualquiera de las
líneas de descripción de valores, se muestra en la ventana principal la búsqueda de
los conceptos que tienen datos en ese valor.

Funcionalidad útil
Con el uso de Valores, podemos mostrar esos campos personalizados en la ventana
principal, para cada línea de conceptos, igual que el Código o el Resumen.
Definiendo en las cabeceras de todos los conceptos, podemos ver esos datos a
cualquier nivel y con cualquier tipo de concepto. El acceso a los datos de valores
(para programación de informes y para todo tipo de búsquedas, como las definiciones
de cabeceras), es con el nombre del valor, como si fuera un campo de la tabla CON;
es decir, poniendo como cabecera la línea:

Antigüedad:con.fecant

aparece el campo con los valores de cada concepto.

Ventana Términos
Accesible desde la opción Ventana Términos... , presenta la lista de términos asociados
al concepto seleccionado en la lista de la ventana principal, y se actualiza cuando dicho
concepto cambia (por ejemplo, seleccionando con los botones Siguiente o Anterior).

En la primera sección de la ventana se rotula el icono representativo de la ventana y el


del tipo del concepto actualmente seleccionado. A continuación el Código y Descripción
del mismo. En el extremo derecho hay un índice con el número de orden del término
actualmente seleccionado (si hay alguno) y el número total de términos en el concepto
actual.

En esta ventana se pueden crear, añadir, eliminar, modificar y trasladar cualquier


término. En definitiva se tiene el control de todos los términos de la aplicación, que se

Menú Concepto / 93
definen como cualquier cadena de caracteres con más de 1 carácter y menos de 15 y
sin caracteres blancos intermedios (espacios, tabuladores y fin de línea...).

Los términos sirven para agrupar conceptos que no tienen ninguna característica
común en su código, su posición o tipo de información. Esta información sirve tanto
para búsquedas por términos comunes, por ejemplo, como para tener asociados
descriptores que nos permitan hacer búsquedas complejas en lenguaje natural.

El botón Asocia, que es el más útil desde el punto de vista de la administración de


términos, permite asociar uno o varios términos seleccionados en una máscara de
códigos, al concepto que seleccionemos en la ventana principal.

Pinchando en nos aparece una línea de introducción de texto


rotulada máscara de códigos de términos que permite la introducción de máscaras
para mostrar listas de términos, de forma análoga a las lista de gráficos de la ventana
Gráficos.

Por ejemplo, introduciendo en este campo, a*, se presentarán en la ventana todos los
del archivo, que comiencen con la letra a.

Cuando estamos en este modo de LISTA, el rótulo de la primera sección presenta el


rótulo Términos en máscara: en vez de un concepto, para indicar que el contenido de la
lista no está relacionado con el concepto actual. En este modo el cambio del concepto
actual en la ventana principal no afectará al contenido de esta ventana.

y de esta ventana anulan el contenido de la


máscara presentando la lista de términos del concepto actual.

Ventanas del programa / 94


Recuerde que las máscaras utilizan los comodines * e ?, los rangos [], la negación de la
máscara completa o del rango !, etc... Por ejemplo, la máscara [Aaá]* define a la lista
compuesta por todos los términos que empiezan con A, a o á.

En el campo de edición, podemos asociar manualmente términos nuevos en la base o ya


existentes, pero no relacionados con el concepto actual. Se muestra el Diálogo de
confirmación Añade términos.

Para modificar manualmente un término, basta con cambiarlo en el campo de edición,


teniéndolo seleccionado. Cambiará para todos los conceptos que lo tengan asociado.

Seleccionando un términos o grupos de ellos, y pulsando la tecla SUPR, podemos


eliminarlos, bien de la relación con el concepto actual o del archivo si estamos en modo
LISTA. Esto siempre que el archivo esté en modo Edición.

Si en modo lista, el término está asociado a algún concepto e intentamos borrarlo se


nos muestra el mensaje:

Copia los términos seleccionados a la misma ventana del archivo


paralelo. Puede producirse el siguiente error:

Menú Concepto / 95
Ventana Gráficos
Cabecera de la ventana: Barra de herramientas

Panel izquierdo: visualización y herramientas

Panel derecho: Lista de gráficos y dispositivas

Botones al pie de la ventana

Accesible desde la opción Ventana Gráficos..., muestra dos paneles para gestionar y
visualizar la información gráfica del archivo, tanto contenida dentro de la base de datos
(incrustada), como con archivos externos relacionados (vinculada). Al igual que gráficos,
se admite vincular otros objetos multimedia (vídeos, sonidos) y en general cualquier tipo
de archivo, aunque las herramientas de esta ventana están orientadas a visualización
y tratamiento de imágenes y gráficos vectoriales.

Para ver qué tipos de archivos son reconocidos por la aplicación, vea diálogo Importa
gráfico.

Cabecera de la ventana: Barra de herramientas


En la primera sección, o bien se rotula el icono del Tipo de concepto actual seguido de
su Código y Resumen, o bien se muestra el icono representativo de búsquedas y el
rótulo: "LISTA DE GRÁFICOS: <búsqueda>", en caso de haber realizado una búsqueda
de gráficos con alguna de las herramientas o botones de búsqueda de la pestaña
Utilidades.

En el lado derecho, hay una serie de botones y conmutadores de estado, en 3


secciones, con las siguientes funciones:

Establecer modos de visualización


M uestra alta definición: Permite cambiar el juego de gráficos que se muestran
en el panel izquierdo, cuando hay definida una serie de media resolución,
mediante las opciones de la pestaña Utilidades. Pulsado, cada vez que
seleccionamos una diapositiva, se accede al archivo a máxima resolución
(incrustado o vinculado) y se muestra en función del estado del siguiente
conmutador. Si no está pulsado se muestra el gráfico de media resolución
generado (si no tiene, SIEMPRE se muestra el tamaño original).

Ajusta a ventana mapas de bits: Amplia o reduce el gráfico seleccionado en el


panel de diapositivas, mostrándolo ajustado a los límites del panel izquierdo, con
su proporción original. Si no está pulsado, se muestra el gráfico a su resolución
real. En los casos de gráficos pequeños, con esta vista se ampliarán, y viceversa:
en el caso de gráficos grandes, se reducirán hasta ajustarse para que se vean
completos.

Fondo blanco en vectoriales: No tiene efecto si el gráfico es de mapa de bits. En


caso de que tenga algún formato vectorial (DXF, DWG, WMF, EMF, DXI...)permite
invertir el color del fondo (que suele ser negro).

Blanco y negro en vectoriales: Tampoco tiene efecto si el gráfico es mapa de


bits. Cuando el conmutador está activado muestra los gráficos en blanco y
negro. Si el fondo es negro el gráfico se verá blanco y viceversa.

Ventanas del programa / 96


Calcula límites en DXF: Evita los puntos de coordenadas absolutas que
contenga un archivo vectorial, y representa el gráfico ajustando al tamaño de la
ventana, el dibujo completo de extremo a extremo del panel de visualización.

Importar y exportar
Copiar gráfico actual al portapapeles (cambio) Baja (Control) M edia... Lleva el
archivo gráfico seleccionado (sólo de uno en uno) al portapapeles de Windows,
para que sea utilizado por cualquier otra aplicación con la simple operación
estándar de pegar (CTRL+V, en general). Si pinchamos en el botón con la tecla
MAYÚSCULAS pulsada, lo que se copia es la diapositiva, y si mantenemos
pulsada la tecla CONTROL, se copia la imagen de media resolución.

Pegar gráfico actual del portapapeles... recoge el contenido del portapapeles de


Windows, si es un archivo gráfico, mostrando el diálogo Pegar gráfico. Si no hay
un gráfico en el portapapeles, se muestra:

Si lo hay, aparece el diálogo:

mostrando inicialmente el nombre "defecto.<ext>", y la extensión depende del


archivo que se tiene en el portapapeles. El botón Acepta graba el gráfico en el
archivo definido y lo incrusta o vincula en la base de datos. Si el nombre de
archivo definido no incluye camino, el archivo se graba en el último directorio
utilizado.

Exportar gráfico actual a archivo (cambio) Baja (Control) M edia... abre el


diálogo estándar de buscar carpeta para elegir un directorio de destino para el/
los gráficos/s en alta resolución SELECCIONADOS en ese momento. Si
pinchamos en el botón con la tecla MAYÚSCULAS pulsada, lo que se exporta es
la diapositiva, y si mantenemos pulsada la tecla CONTROL, se exporta la media
resolución.

Importar archivos gráficos... abre el diálogo Importa gráfico

Si al insertar un archivo con cualquiera de los métodos, con el nombre sugerido

Menú Concepto / 97
u otro, coincide con uno que ya existe, aparece el diálogo:

Dentro de este diálogo, el botón Mantenerlo, Ignora la orden de pegado y


mantiene el archivo existente con su denominación. El botón Reescribirlo
machaca el archivo antiguo y NO ignora la orden de pegado,y el botón
Renombrarlo pega el archivo nuevo añadiendo un dígito al nombre original
manteniendo la orden de pegado y manteniendo el archivo original.

Modificar y editar
Incrustar <> vincular: Modifica el estado de los gráficos seleccionados en la base
de datos: si están como un archivo externo a la base, lo incorpora a la misma; si
en cambio está incluido en la base de datos, guarda el gráfico como un archivo
independiente, externo a la base de datos, y lo vincula — la diapositiva pasa a
mostrar una flecha como la de un acceso directo —. El directorio donde se
guardan los archivos desincrustados es el Directorios de gráficos vinculados... de
la pestaña Utilidades (el mismo que la base de datos, si no se ha especificado
ninguno).

Rota 90º a la izquierda y Rota 90º a la derecha: Transforman las


imágenes seleccionadas de esa forma (no solo la diapositiva y la media
resolución, sino que cambian realmente el gráfico en alta resolución, no importa
que sea externo y esté VINCULADO).

Abre programa de edición: Abre el gráfico seleccionado, con el programa


instalado en Windows que tenga registrada la extensión de ese archivo. No
admite multiselección. Si el gráfico está incrustado, se guarda en el
directorio \TEMPORAL con el nombre "defecto" para que el programa pueda
modificarlo, pero al acabar de modificarlo, habrá que importarlo porque es un
archivo distinto, no modifica el que teníamos en la base de datos.

Panel izquierdo: visualización y herramientas


Pestaña Gráfico
Muestra una vista del gráfico, según los modificadores de la barra de herramientas.

En la primera sección tenemos el nombre del gráfico, y si no está incrustado en la


base de datos, el camino en el que se encuentra. Si el gráfico está vinculado y no se
encuentra, aparece el mensaje de error "Archivo no encontrado" y el camino en el
que se está buscando.

Ventanas del programa / 98


A la derecha, se muestran los datos del gráfico: En el caso de gráficos vectoriales
solamente el tamaño del archivo gráfico, entre paréntesis. En el caso de bitmaps:
ancho, alto, datos de color y tamaño del archivo y compresión con un formato como
"550 x 132 x 24 RGB (15k)", donde 24 bits de color son equivalentes a 16 millones de
colores, y el sufijo indica la codificación de colores: RGB, CMYK, ARGB (es decir, con
canal alpha), Grayscale, PARGB, RGB565... Si el formato no es reconocido por la
librería gráfica, se indica en este campo.

En el recuadro donde se presenta el gráfico, se pueden hacer ampliaciones


sucesivas, y se tiene un histórico de los zooms, para poder “alejar” la imagen en los
mismos pasos. Para ampliar una zona, marque un recuadro sobre la imagen
manteniendo pulsado el botón izquierdo del ratón. Para volver al tamaño original
después de haber hecho más de un zoom, pulse el botón derecho del ratón.

También hay unos controles para utilizar en el panel derecho mientras hacemos
zoom y tenemos el foco en la imagen del panel izquierdo: La rueda del ratón (si la
tiene), sirve para desplazar arriba y abajo la lista de diapositivas (igual que las teclas
AV.PAG y RE.PAG), y las cuatro flechas del cursor, para desplazar la selección de la
diapositiva.

Pestaña Utilidades
Contiene herramientas para gestionar los gráficos de la base (incrustados y
vinculados), realizar la incrustación de los externos, así como crear gráficos de
resolución intermedia, diapositivas, buscar, eliminar masivamente por nombres o
características, realizar importaciones, etc...

Primera sección
En el campo Directorios de gráficos vinculados... (defecto: directorio bd), se toma
como directorio base y también como directorio por defecto, el directorio público.
Esto quiere decir que admite un único directorio, con camino absoluto (como c:
\programas\ingra) o relativo al directorio público (sin tener en cuenta las comillas,
como '..\gráficos' ó 'imágenes\fotos'). El botón Búsqueda del directorio de gráficos
que hay a la derecha de este campo, muestra el diálogo estándar de búsqueda de
carpetas, para seleccionar sin teclear.

Menú Concepto / 99
IM PORTANTE: También admite un directorio relativo al raíz de cualquiera de las
unidades locales o mapeadas del PC, de forma que busca por todas ese camino. Por
ejemplo, ':\imágenes\fotos' sin ninguna letra de unidad, buscaría por todas de la A:
a la Z: y cogería el directorio de la primera que encontrara.

La utilidad de este sistema se pone de manifiesto cuando utilizamos un CD-ROM


de gráficos que tenemos enlazados con conceptos de nuestra base de datos, y la
unidad lectora de CD en nuestro ordenador se llama E: pero si utilizamos la base de
datos en otro ordenador, y la unidad lectora de CD se llama D: en esa máquina, con
una referencia clásica de camino completo, no se encontrarían los gráficos. O por
ejemplo, cuando copiamos los gráficos de un CD-ROM a nuestro disco duro.

Las imágenes VINCULADAS se buscarán a partir de ese directorio base, con los
subdirectorios con los que han sido almacenados los gráficos. Esto nos permite
cambiar los gráficos de sitio o copiarlos sin tener que cambiar las referencias: sólo
hay que mantener la estructura de subdirectorios con la que se vincularon.

El conmutador Vincular gráficos al importar, permite seleccionar si se quieren


dejar vinculados los gráficos al operar con ellos desde la siguiente sección.

Sección Procedimientos masivos


El campo Máscara de códigos o SQL, permite indicar una búsqueda por código (las
claves o códigos de los gráficos son su propio nombre de archivo) o algún otro
criterio. Por ejemplo, tecleando E*.jpg , se presentará en el panel derecho una lista
con todos los objetos incrustados -o vinculados-, de tipo JPG y que comiencen por E.
En modo Lista de gráficos, los objetos mostrados están desincronizados del concepto
actual.

Recuerde los caracteres comodín de las máscaras de códigos: * e ?, los rangos [] , la


negación de la máscara completa o del rango ! , etc... Por ejemplo, la máscara [!Aaá]
* selecciona los archivos que no empiezan por A, a ni á.

Estos dos campos seleccionan los gráficos de la base que se van a procesar con las
siguientes operaciones:

El campo Tamaño de la media resolución, permite definir el ancho y alto máximo


en puntos, que va a tener el juego de gráficos de media resolución que se puede
generar para cualquier conjunto de gráficos. Estos gráficos son una vista

Ventanas del programa / 100


intermedia entre las diapositivas (que sólo dan una idea vaga de la imagen) y el
tamaño real que en algunos casos puede ser innecesario cargar (aunque sea válido
para imprimir, por ejemplo).

Los archivos de bitmap generan una media resolución en formato JPG, y todas las
imágenes vectoriales en formato EMF. El valor de defecto de los tamaños máximos
(que se aplica si el campo esta vacío) son 400 x 400 puntos (equivalente a teclear
"400 400").

Permite rehacer las diapositivas de todos los


gráficos vinculados o incrustados que se muestran en la pestaña Diapositivas. En
el diálogo podemos elegir el botón Máscara, para poder seleccionar unos gráficos
específicos en el campo Máscara de códigos o SQL. Sino, deberemos tener un grupo
seleccionado o optar por Sin diapo (montar las que no tengan). Si se encuentran
gráficos que dan error, no se muestran mensajes, simplemente, no se crean las
diapositivas. Las que se crean, se hacen con el número de colores actual de
Windows y con los modos de la barra de iconos que tengamos en ese momento.
Eliminar diapositivas borra todas las existentes (esto no afecta a los gráficos).

Como al arrastrar o importar cualquier gráfico, SIEMPRE se genera su diapositiva,


no será muy necesario ni generarlas ni eliminarlas, pero una particularidad es
que si hay definida un tamaño máximo (en alto, ancho o ambos) en el campo
Tamaño de la media resolución, se genera también la media, sino, sólo se genera
la media de los archivos vectoriales al tamaño de defecto (con los vectoriales se
hace siempre).

Permite generar esos los gráficos reducidos y


Eliminar media resolución sirve para borrarlos todos. Esto puede ser útil si no los
utilizamos, ya que tanto las diapositivas como los gráficos de media resolución
siempre están incrustados en la base de datos y pueden ocupar mucho espacio si
son miles.

Los demás botones, excepto estos dos mencionados, actúan sobre la máscara
seleccionada en el campo Máscara de gráficos y permite realizar esas operaciones
masivas. Al usarlos sin una máscara, se nos da el aviso:

Eliminar relaciones sirve para desconectar gráficos de la base de los conceptos con
los que se relaciona, pero dejar los gráficos para asociarlos a otros conceptos, por
ejemplo.

Sección Procedimientos sobre la lista actual


Muestra funciones sobre cualquiera la lista de gráficos o diapositivas del panel
derecho.

Menú Concepto / 101


El botón Orden actual a posición, permite reordenar los gráficos asociados a aun
concepto, sólo si estamos viendo los gráficos de un conceptos actual; no funciona
en modo lista de gráficos.

Sección Búsquedas
Panel con botones para realizar las búsquedas más interesantes y potentes, y
mostrar el resultado en el panel derecho o en la ventana principal (ya que algunas
realizan búsquedas de conceptos o relaciones, en vez de gráficos).

Por ejemplo, Sin media muestra una lista de gráficos con los que no tiene
generada una imagen de media resolución, en cambio, C con 1G, (conceptos con
un gráfico) lleva a la ventana principal una lista de conceptos que tiene un único
gráfico asociado, y podemos ver estos gráficos en el panel derecho, moviéndonos
con los botones Siguiente y Anterior. Desactiva permite pasar de nuevo al modo
"gráficos del concepto actual".

Panel derecho: Lista de gráficos y dispositivas


Pestaña Diapositivas
En la primera línea, en el lado izquierdo se muestra el campo Descripción de la
siguiente pestaña, para el gráfico seleccionado (sólo cuando es uno), y el lado
derecho el número total de gráficos, la posición del actualmente seleccionado, y si
son varios, entre paréntesis el núm. de seleccionados.

En el panel inferior se muestra una lista de pequeñas imágenes (diapositivas) bien


de los gráficos asociados al concepto seleccionado en la ventana principal, o bien de
los seleccionados mediante una búsqueda. Cuando se asocian otro tipo de archivos
que no son gráficos (vectoriales o bitmaps), al hacer doble clic sobre ellos, se

Ventanas del programa / 102


muestra un icono del sistema representativo del tipo (sonido WAV, midi MID, video
AVI, etc.) pero no se realiza ninguna acción, Podemos tener guardados o vinculados
los archivos del tipo que se desee.

En el recuadro (siempre que no sea una lista de gráficos) podemos cambiar de orden
los gráficos de un concepto con sólo arrastrarlos con el ratón, o bien importarlos
incrustados o vinculados arrastrándolos desde el Explorador de Windows.

El doble clic sobre cualquiera de las diapositivas, tiene dos funciones: si en el panel
izquierdo NO se está viendo en primer plano la pestaña Gráfico, la pone mostrando
la imagen completa o a media resolución, no importa si es del concepto actual o de
una lista de gráficos obtenida mediante una búsqueda. Si ya se veía la pestaña con
el gráfico, entonces abre el programa asociado en Windows al tipo de gráfico, igual
que el botón Abre programa de edición de la barra de herramientas.

Pestaña Lista
Es otra vista similar a la de la pestaña Diapositivas (los gráficos asociados al
concepto actual, o selección mediante una búsqueda), pero con otras ventajas:
muestra más información sobre los gráficos, permite ordenar por esos campos de
datos y editar algunos, ocupa menos espacio, etc. La selección no produce ningún
efecto en el panel izquierdo, y el doble clic muestra la imagen en la pestaña Gráfico.

En el campo de edición del la columna Descripción, se puede añadir un comentario


a cada gráfico; en Código y Camino, se pueden modificar el nombre y posición de los
gráficos (incluso masivamente, con la calculadora). Gráfico muestra información
sobre cada imagen (resolución, nº de colores, tamaño y compresión). Usos, muestra
el número de relaciones de cada gráfico con conceptos de la base.

Pestaña Filtros
Muestra diversos botones (cada uno de ellos un filtro), la mayoría con parámetros de
configuración, que se aplican en memoria a la imagen actual en el panel izquierdo
(Gráfico).

Menú Concepto / 103


En la carpeta de informes \Colecciones especiales\Gráficos\Ejemplos hay un
informe que genera una prueba de los filtros sobre una imagen.

Cada uno de los botones tiene un comentario del filtro y los parámetros que utiliza;
al pulsar el botón, se aplica el filtro con los parámetros del campo que hay a su
derecha. Dejando el ratón encima de cada botón, aparece un comentario extendido
sobre el uso del filtro.

Algunos con un funcionamiento especial, que requieren aclaraciones:

Al pulsar un botón de filtro, se pueden presentar los siguientes mensajes:

Los filtros se aplican sucesivamente (cada uno sobre el resultado del anterior), pero
para volver a la imagen original podemos pulsar . Todas las aplicaciones de
filtros son pruebas, que podemos pasar a la imagen definitivamente con el botón
Modificar. También se puede Crear una imagen nueva con la aplicación del filtro,
crear un Archivo externo con ella, o pasar una copia al Portapapeles.

Ventanas del programa / 104


Botones al pie de la ventana
, y tienen las funciones
habituales.

Está activo sólo en modo lista y permite asociar uno o varios


gráficos que seleccionemos mediante sus diapositivas, a uno o varios conceptos
seleccionados en la ventana principal.

Refresca la información mostrada con la existente en base de


datos o en el disco si se trata de archivos externos.

Muestra la lista de informes relacionados con la impresión de


fichas o listas de gráficos, en el diálogo Selección de destino. Casi todos son catálogos
para imprimir varios gráficos por página con diversos formatos, y en el nombre de
archivo se muestran los gráficos por fila y columna.

Podemos eliminar gráficos o relaciones con los conceptos de la base de datos


mediante la tecla SUPR. Se presentan dos formas de funcionamiento, dependiendo de
si tenemos seleccionados gráficos de una lista o estamos viendo los gráficos de un
solo concepto:

A. Si se trata de los gráficos asociados a un sólo concepto, mientras tengamos


seleccionado al menos un gráfico, al pulsar la tecla se nos muestra un
diálogo:

Sólo desconecta los gráficos de los conceptos con los que estaban
relacionados.

borra los gráficos seleccionados de la base de datos si estaban


incrustados, o elimina la referencia si estaban vinculados, pero en ninguna de
los dos casos borra el gráfico externo a la base de datos.

Menú Concepto / 105


B. Si es una lista de gráficos seleccionados mediante algún criterio de búsqueda,
al pulsar SUPR se nos muestra un diálogo:

Y funciona igual que la opción Gráficos del diálogo anterior.

Ventana Paramétricos
Accesible desde la opción Ventana Paramétricos...; permite asociar a un concepto una
descripción paramétrica (un breve programa realizado, bien en lenguaje tradicional de
paramétricos, o bien en JavaScript). Los conceptos de esta clase (no se trata de un Tipo
de concepto especial), no son realmente conceptos con un precio, fecha, texto etc. sino
que representan UNA FAMILIA DE CONCEPTOS, descrita por el programa. Los
elementos de la familia se pueden seleccionar y utilizar, ya como un concepto normal,
mediante una selección de parámetros con opciones excluyentes entre sí.

Además, como caso especial, también se pueden tener conceptos de clase familia
paramétrica con el programa compilado en una DLL, no editable en esta ventana (la
especificación tanto del lenguaje estándar tradicional de paramétricos, como las
especificaciones para generar paramétricos compilados, las encontrará en un anexo de
este ayuda en línea y en el sitio oficial www.fiebdc.es). Esto permite proteger la
propiedad intelectual de la base de datos, que no se puede modificar ni copiar, sólo
utilizar las combinaciones resultantes.

En la primera sección de la ventana se rotula el icono de Tipo, Código y Resumen del


concepto familia paramétrica seleccionado. En la parte derecha de ésta sección,
aparece:

un índice que muestra las combinaciones soportadas o no soportadas (según la cantidad


de cada una para la descripción paramétrica actual, ya que se guarda la menor
cantidad). Las no soportadas se representan como un número negativo. También puede
ser cero, si no hay combinaciones inválidas.

Configuración global paramétrica: Abre la Ventana Configuración global


paramétrica... con toda la información referente a librerías Javascript y paramétricos
globales.

Chequea: Hace una comprobación del programa actual y comprueba que no hay
ningún error de sintaxis, errata, etc. El resultado del chequeo se vuelca a un archivo

Ventanas del programa / 106


de texto y se abre el bloc de notas o programa asociado, con ese archivo.

Ventana propiedades: Conecta directamente con la ventana de propiedades del Tipo


actual.

La parte principal de la ventana está dividida en tres partes.

En la primera sección, encontramos todas las opciones para la generación de los


paramétricos.

Pestaña Paramétrico
Consta de una tabla, de altura redimensionable, donde se rotulan en columnas los
nombres de los parámetros horizontalmente y proporcionalmente al tamaño de cada
uno de ellos.

Debajo de los rótulos de los parámetros, se despliegan tantas líneas como el mayor
número de opciones de los parámetros, y en cada línea se dispone en primer una
letra de la a hasta la z que identifica cada opción para cada parámetro.

Las opciones de cada parámetro se representan por un selector exclusivo (si


seleccionamos un valor de una columna, al seleccionar otro quitamos la primera
selección), que lleva un texto al lado. Cuando la elección de un parámetro tiene
alguna incompatibilidad de selección con otros (incompatibilidad definida por el
programa paramétrico), se desactivan las opciones de todos los parámetros que no
son compatibles con la selección realizada, y su rótulo aparece en color gris.

Menú Concepto / 107


Otra ayuda del programa, es que cuando la elección de parámetros de varias
columnas, por incompatibilidad, obligan a elegir una opción, el rótulo se colorea de
azul como si lo hubiésemos seleccionado (aunque el selector no se activa), y se esta
forma ya se puede mostrar el derivado paramétrico que resultaría de elegirlo.

Pestaña Combinaciones válidas


Genera un listado con todas las posibles combinaciones del paramétrico actual.

Pestaña derivados destacados

Esta pestaña guarda una relación de los derivados más utilizados dentro del
paramétrico en cuestión.

Podemos alimentar dicha relación de dos formas:

1. Seleccionando, en la pestaña paramétrico, los parámetros que formarán el


concepto y pinchando sobre , ubicado en la parte central derecha de la ventana
paramétricos.

2. Seleccionando el concepto a incluir de entre todas las posibles combinaciones


generadas en la pestaña Combinaciones válidas y pinchando sobre .

Ventanas del programa / 108


Para eliminar un concepto de la lista de Derivados destacados, simplemente tenemos
que seleccionarlo y pinchar sobre , situado en la parte central derecha de la
ventana de paramétricos.

Tanto la inclusión como la exclusión se puede llevar a cabo por grupos, es decir,
multiseleccionando conceptos y pinchando sobre o , dependiendo del resultado
que se quiera obtener.

En la segunda sección aparece -cuando hay seleccionada una serie completa de


parámetros de la familia-, el derivado paramétrico que corresponde a esa selección:
icono de Tipo, Código, Unidad, Resumen, Precio, y debajo es él, toda la información
relacionada.

A la derecha del derivado paramétrico tenemos el botón , que abre la


ventana Utilidades. Esta ventana contiene herramientas para trabajar con
descripciones paramétricas, orientadas sobre todo a desarrolladores de bases de datos.

Los botones tiene las funciones que se explican a continuación (casi todas activas con
el archivo en modo Edición, ya que modifican la base). Tenga en cuenta que en los
diálogos, siempre se admite opcionalmente una máscara de búsqueda SQL para que la
operación no se realice sobre todos los conceptos paramétricos, sino solamente sobre un
grupo:

Paramétrico actual

Restricciones del paramétrico actual: Muestra, en un archivo de texto, todas las


combinaciones no soportadas por el paramétrico en el que estamos.

Crear derivados aleatorios: El diálogo Crear derivados aleatorios, extrae de todas


las familiar paramétricas existentes en el archivo, un número determinado de
derivados, aleatoriamente, entre todas las posibles combinaciones de cada
familia paramétrica y los coloca al mismo nivel que dicha familia.

Es muy útil para desarrolladores de bases de datos; les permite extraer de forma
totalmente automática un número fijo de derivados.

Se muestra el mensaje:

Menú Concepto / 109


Se pide la introducción de un número cualquiera, sin límite. Los derivados no se
repiten, así que como mucho hay un concepto con cada uno de las combinaciones
válidas, en caso de dar un número suficientemente grande.

Crea derivados aleatorios del concepto paramétrico


seleccionado en ese momento.

Crea el número de derivados aleatorios elegido para cada uno


de los conceptos paramétricos de la base de datos.

Crear derivados destacados aleatorios. Permite generar un número


determinado de derivados al azar de entre las posibles combinaciones del
paramétrico actual.

Los derivados generados se almacenan en la pestaña de Derivados destacados.

Compara solamente este paramétrico con el paralelo...: Permite detectar


diferencias entre el paramétrico seleccionado y otro seleccionado en el paralelo.

Todos los paramétricos

Chequear paramétricos...: Realiza una función similar a la del botón Chequea

Ventanas del programa / 110


de la primera sección de la ventana, sólo que aquel es sólo para el paramétrico
actual, y este para un grupo o todos los paramétricos del archivo. El chequeo,
como valor añadido, además examina y graba en un índice las combinaciones
válidas, de forma que una base chequeada, ejecuta los paramétricos mucho más
rápidamente y además intenta ayudar sugiriendo las opciones que son válidas,
cuando seleccionamos unas cuantas.

Como se construye un índice, otra ventaja añadida es que se nos permite


chequear Todos los paramétricos de las base o todos los filtrados con la máscara,
o bien solamente los No chequeados.

Comparar paramétricos con el paralelo...: Permite detectar diferencias entre


los paramétricos de un archivo y otro abierto en el paralelo.

Convertir paramétricos FIEBDC interpretados a JavaScript...: Convierte todos


los paramétricos de lenguaje tradicional a JavaScript sin tener que codificar ni
una coma. Es un proceso irreversible y el sistema nos avisa de ello con un
mensaje.

Convertir paramétricos JavaScript a FIEBDC compilados (DLL)...: Va un paso


más allá y convierte paramétricos en lenguaje JavaScript en un programa de
librería: una DLL compilada con el propio Menfis, de forma que NO ES
NECESARIO UN COMPILADOR externo de ese lenguaje. Es un proceso
irreversible y el sistema nos avisa de ello con un mensaje.

Menú Concepto / 111


Volcado de paramétricos...: Muestra un diálogo que acepta opcionalmente una
máscara de códigos, para volcar a un archivo de texto (presenta.txt) todas las
combinaciones paramétricas para los parámetros globales actuales.

Información de DLL paramétrica...: Muestra información referente al número


de parámetros, número de combinaciones posibles y número de combinaciones
no soportadas, por cada paramétrico.

Búsquedas

Los botones de la sección inferior, Todos los paramétricos, Paramétricos sin


chequear, Derivados con familias, Derivados sin familias y Derivados sin padre
o huérfanos, sirven para hacer búsquedas de conceptos por los criterios más útiles
en el trabajo con paramétricos. Como siempre, el resultado de la búsqueda se
muestra en la ventana principal.

Recalcular derivados paramétricos: Si se encuentran dentro del archivo actual


conceptos que sean familias (descripciones ) paramétricas, y también conceptos
derivados de esas familias, recalcula todos los derivados existentes a partir de las
familias que los originaron. Sirve para actualizar derivados si hemos modificados
las descripciones. También acepta una máscara de códigos a seleccionar.

Ventanas del programa / 112


A continuación se muestra la descripción tal como aparecerá en la ventana Texto del
derivado que traslademos.

En la tercera sección encontramos las siguientes pestañas:

Pestaña Descomposición
Si el programa de la familia paramétrica define una descomposición para esos
conceptos, la descomposición se muestra en esta pestaña, al estilo de la ventana
principal, con todos los campos de concepto: Tipo, Código, Ud., Resumen, Precio,
Cantidad e Importe

Pestaña Otros Textos


Igual que la pestaña anterior, pero para los textos múltiples. A través de textos
clasificados tendremos establecidos los pliegos que deseemos.

Pestaña Programa
Código programable que define para el concepto de familia actual: los parámetros
posibles y las incompatibilidades entre ellos, los valores de Código, Resumen, Unidad,
Precio..., la descomposición en otros conceptos, y si procede, el Texto y el Pliego.

Menú Concepto / 113


Como se ha dicho antes, algunos desarrolladores de bases de datos tienen protegidos
contra edición sus archivos, de forma que en ésta pestaña sólo aparece el mensaje
“INFORMACIÓN PROTEGIDA”. Si el programa está escrito en lenguaje tradicional de
paramétricos, podemos modificarlo cuando el archivo está en modo Edición.

IM PORTANTE: En una misma base de datos pueden convivir familias paramétricas


definidas en lenguaje tradicional, en JavaScript y compiladas en DLL

En la ventana de Informes y procedimientos hay programas JavaScript útiles para


trabajar con bases paramétricas programadas en JavaScript. Por ejemplo, el
procedimiento par1b.xjs ó par1c.xjs contienen funciones para modificar masivamente
arrays de valores en los paramétricos (ordenarlos, aplicarles un factor...)

Si está pensando en trabajar en un archivo con familias paramétricas, le interesará


leer la recopilación de consejos sobre edición de paramétricos.

La selección de parámetros de esta pestaña se mantiene aunque cambiemos de


pestaña, mientras no modifiquemos el programa o cambiemos de concepto.

Los botones al pie


La columna de la izquierda nos muestra la línea en la que nos encontramos, cuando
estamos en la subpestaña Programa.

Los botones , , e tienen


las funciones habituales en estas ventanas.

Graba la descripción paramétrica si ha habido modificación.


Cuando modificamos una descripción paramétrica, en cuanto cambiamos de ventana
o de control dentro de esta misma, se graban los datos automáticamente, pero nos
puede interesar ver los cambios mientras estamos tecleando.

Permite trasladar el derivado paramétrico que se muestra


actualmente (si es que hemos hecho una selección con todos los parámetros) al
archivo paralelo. Si lo que deseamos es trasladar familias completas (el concepto
paramétrico) debemos utilizar Traslada de la ventana principal.

El concepto derivado se traslada a la posición actual del cursor de la ventana principal

Ventanas del programa / 114


del archivo paralelo, aunque puede aparecer alguno de los siguientes mensajes de
error:

Ventana Mediciones
Accesible desde la opción Ventana M ediciones...; muestra el desglose en múltiples
líneas de una medición asociada a un concepto (o más correctamente: a una relación
entre 2 conceptos). El valor medición o rendimiento de la ventana principal en modo
descompuestos, puede ser un valor directamente introducido en la ventana, o el total de
una pantalla de líneas de medición asociada, en este caso en el campo medición de la
lista de conceptos de la ventana principal, se suele tener un icono especial para
identificar los conceptos que tienen.

Esta ventana refleja las líneas de medición, si las hay, de la línea de descomposición
seleccionada en la ventana principal, se actualiza en el momento que se selecciona
una nueva línea de descomposición.

Secciones de la ventana
Primera sección
La información que se muestra en la primera sección de la ventana de mediciones
es la siguiente:

En primer lugar, a la izquierda del todo, vemos que se nos muestra el código del
padre, seguido del código del concepto actual, la unidad de medida y el resumen de
dicho concepto. A continuación se nos muestra la el número de la línea de medición

Menú Concepto / 115


en la que nos encontramos con respecto al total de líneas de medición que tiene
asociado ese concepto, seguido de la suma total de todas las líneas de medición,
siempre y cuando no hayamos asignado ningún factor. De haber asignado algún
factor esta parte de la sección mostrara el factor multiplicador por la medición total
de las líneas de medición y el resultado de dicha multiplicación.

Por último, a la derecha del todo tenemos una serie de botones para distintas
funciones como son:

Copiar: Lleva al portapapeles las mediciones actualmente seleccionadas. Se


puede utilizar la combinación CONTROL+C.

Pegar: Trae desde el portapapeles una o varias líneas de medición que hayamos
copiado de otro concepto o archivo. Se puede utilizar la combinación de teclas
CONTROL+V. Si el recorte no es una línea de medición, no se realiza ninguna
acción.

Para pegar mediciones, también está soportado el arrastrar y soltar (drag & drop)
desde la ventana de medición paralela.

Importar: Abre Diálogo Importa medición.

Exportar: Abre Diálogo Exporta medición.

Conmutador M .Repite: Permite que sólo con teclear un valor cualquiera en


una de las dimensiones de una línea de medición, se repitan todos los demás
valores de dimensiones de la línea anterior. Para evitar la repetición, basta con
introducir una línea en blanco que rompa la secuencia de copia.

Conmutador M ostrar descripción larga: Muestra la descripción completa del


concepto en esta misma ventana sin necesidad de tener que recurrir a la
Ventana de Textos.

Botón Factor: Permite multiplicar toda la medición por un valor que se puede
mostrar por separado. El valor se rotula en la parte superior de la ventana, y en
el campo de edición de la medición en la ventana principal.

El resultado Total medición se actualiza constantemente cuando hay algún


cambio en líneas de medición.

Cuando no hay una línea de descomposición seleccionada o cuando estamos en


modo compuestos o modo máscara, se muestra el rótulo: "No hay
descomposición seleccionada"

Ventanas del programa / 116


Sección de cabecera
Presenta las siguientes columnas (puede ver cómo personalizar éste tipo de botones
de cabecera en el tema ventana principal):

La salvedad, es que la pulsación de los botones, no permite ordenar por los distintos
campos, sino que hace aparecer o desaparecer las distintas columnas de
dimensiones (y sus correspondientes campos de edición). Pulsando la cabecera de la
primera columna (T), se muestra el diálogo de selección Tipo de la línea de Medición
(Diálogo tipo de medición), igual que pulsando el botón Tipo.

Tenemos las siguientes columnas:

T(Tipo): Se utiliza para señalar determinadas líneas especiales. Se puede


poner o cambiar el tipo mediante el botón Tipo, que es equivalente a hacer
doble clic con el ratón en la columna gris a la izquierda del todo.

Pinchando en cada una de las líneas de medición, tenemos accesibles las


opciones de copiar y mover líneas mediante arrastrar y soltar:

Copiar- entre mediciones del mismo o distintos archivos, pero siempre a


la ventana Medición paralela. Naturalmente, el archivo destino debe estar
en Edición.

Mover- sólo se permite dentro de la misma ventana de medición,


arrastrando una o varias líneas (con multi-selección) al lugar deseado. El
archivo actual debe estar en Edición.

Comentario: Se utiliza para documentar las líneas de medición. En las líneas


de tipo E, es la propia expresión

NºUds: En este campo se situarán, normalmente, el número de unidades


iguales de una línea. Aunque las cuatro dimensiones admiten valores
negativos para descuentos de mediciones, es normal en estas líneas de
descuentos poner este campo en negativo. Los valores en este campo son
normalmente enteros pero es posible que se necesite definir fracciones, por lo
que se admiten decimales en coma flotante, es decir, se imprimen los
decimales que haya, por defecto no se imprime ninguno.

Como ayuda para la introducción de datos, si se van introduciendo distintas


cantidades , en la/s columna/s de al lado se copian los valores de la línea
anterior.

Largo, Ancho, Alto: Al contrario que el campo anterior, estos campos suelen
tener valores con decimales y se rotulan con un número fijo de ellos definido
en el campo Decimales Mediciones de la ventana Parámetros generales. Por
defecto, tienen valor 2.

Parcial: Muestra el resultado de operar los cuatro campos anteriores, bien el

Menú Concepto / 117


producto de todos ellos, o si el Comentario es una expresión, el resultado de la
operación.

En la lista podemos realizar selecciones multilínea.

Cuando el modo Edición está activo, debajo de la lista de líneas se abre una sección
con campos de edición que permiten la modificación de cada campo. En función del
formato de medición activo, podemos tener abiertas todas o algunas de las opciones
de entrada de texto de las cuatro dimensiones.

Otros botones de la ventana


Abre la ventana Catálogo de mediciones que muestra una lista de
mediciones estándar muy útiles para tener calculadas. La lista se ordena
automáticamente por código y se presenta con tres decimales.

Esta ventana sirve para mantener la lista, introduciendo o modificando valores en el


catálogo, pero el uso se hace en cada uno de los campos de dimensiones de la
ventana Medición. En vez de teclear la cifra de la dimensión, se puede teclear uno de
los códigos estándar de perfiles o redondos, por ejemplo IPN-200.

Si damos un código incompleto o ambiguo como IP o IPN se muestra un diálogo de


selección para que elijamos el que nos interesa.

Abre la ventana Cabeceras de mediciones que contiene una lista de


rótulos predefinidos para el campo Comentario y los de dimensiones, e incluso
incluir una expresión asociada; así sólo hay que seleccionarlo sin tener que
teclearlos siempre. El botón Traslada de esta ventana permite copiar el contenido a la
de medición.

Sólo está activo cuando no nos encontramos en modo Edición y


permite ver todas las líneas de medición de todas las referencias externas de
mediciones dentro del archivo actual.

Ventanas del programa / 118


Por el contrario, necesita el modo Edición, ya que inserta una
referencia a la medición completa de otra partida (de la que se supone que depende).

IM PORTANTE: sólo se permite la referencia entre mediciones de la misma Fase,


como es lógico. Tenga también en cuenta que se permite más de una referencia a la
misma partida, siempre que sea a distintos Grupos analíticos.

Sirve para aceptar los cambios en líneas de medición sin


abandonar la ventana. Al cambiar de concepto, se produce una validación
automáticamente pero puede interesarnos, aceptar los cambios efectuados hasta ese
momento, para ver su repercusión en la ventana principal; en el importe de la
partida, en el presupuesto del capítulo y en el presupuesto de la obra, si tenemos
activo el modo Calculado.

Al validar, también se recalculan todas las referencias externas de la ventana.

Abre el diálogo habitual de deshacer cambios.

Hace que todas las líneas seleccionadas se copien a la posición


marcada por la última línea seleccionada, delante de ésta y en el orden en que
fueron seleccionadas. No realiza la misma función que el botón que actúa mediante
el portapapeles.

Hace que todas las líneas seleccionadas se muevan a la posición


marcada por la última línea seleccionada, delante de ésta y en el orden en que
fueron seleccionadas. Puede presentar el mensaje:

Hace que todas las líneas seleccionadas sean borradas. Tanto este,
como el botón anterior, pueden mostrar el mensaje:

Si seleccionamos todas las líneas sin dejar ninguna y pulsamos este botón,
desaparecen las mediciones desglosadas de este concepto, pero permanece el total de
la medición que hubiera, como medición directa.

Para eliminar la medición y dejarla en blanco, se deben seleccionar todas las líneas y
pulsar la tecla SUPR.

Los botones Siguiente y Anterior tienen la misma función que habitualmente:


movernos por la lista de conceptos desde esta ventana.

Abre el Diálogo tipo de la línea de medición, igual que el doble clic


sobre una línea en la columna T.

Menú Concepto / 119


Abre el Diálogo Formato de medición, que permite marcar las
dimensiones que queremos utilizar en la medición del concepto actual (cada
concepto puede tener su formato de dimensiones, pero todas las líneas de la ventana
tienen el mismo formato).

Dimensiones en columnas
Se presentan 4 conmutadores: Número, Largo, Ancho y Alto que se pueden marcar
o desmarcar (más cómodamente con el teclado, ya que cada una tiene asociada un
número) igual que pulsando con el ratón en la cabecera de las columnas.

Color en filas
Permite seleccionar un color para cada línea de medición. Para desactivar el color
de fondo, seleccionaremos en primero, que es el fondo de defecto de la ventana.

La operación de cambio de formato puede conllevar una pérdida de información si el


nuevo formato definido tiene menos dimensiones activas que el antiguo. La
aplicación trata de no perder información asignando los valores de las dimensiones
desactivadas a las activadas. Por ejemplo: Si el formato antiguo es: Largo-Ancho y el
formato nuevo: Largo-Alto, el sistema trasladará los valores de la dimensión Ancho,
a la dimensión Alto. También se almacenan los datos en la dimensión eliminada,
en vez de borrarse.

Ventana Certificaciones
Accesible desde la opción Ventana Certificaciones...; muestra el desglose en múltiples
líneas de una medición asociada a un concepto al igual que la ventana de mediciones.
Sin embargo, permite además poder visualizar simultáneamente las dos mediciones, la
de certificación de la fase actual (siempre a origen) y la medición desglosada del
proyecto.

En la sección superior, se encuentra la medición del proyecto. El usuario podrá observar


que esta sección no dispone de línea de edición.

En la sección inferior se encuentran las líneas de medición desglosada de la


certificación. Esta sección si dispone de línea de edición, desde la cual se pueden dar de
alta nuevas líneas de medición desglosada para la certificación de la fase.

Ventanas del programa / 120


Botones de la ventana
Los botones e iconos de la ventana de certificación son iguales y tienen el mismo
funcionamiento que en la ventana mediciones salvo el botón certifica que sustituye
al botón traslada de la ventana anterior.

Traslada las líneas de medición seleccionadas en la sección


superior de la ventana de certificación a la sección inferior en la posición que se
encuentre seleccionada en ese momento.

Ventana Ajusta precio


Esta ventana permite, mediante máscaras de códigos, cambiar el precio y/o el
rendimiento de los conceptos que descomponen una partida al nivel inmediatamente
inferior. Presenta el siguiente rótulo:

Ajustar el precio descompuesto del concepto actual


Introducir la máscara de precios (solo simples con padre único) a los que se afecta.

Introducir la máscara de rendimientos (solo sin medición desglosada) a los que se


afecta

Introducir el precio o coste al que se quiera ajustar.

Marcar M.Coste (F3) para ajustar el coste (coste total) en lugar del precio (coste
directo)

Ejecutar AJUSTA (F4)

Menú Concepto / 121


Para ajustar, en la lista de conceptos de la ventana principal, se debe estar viendo LA
DESCOMPOSICIÓN de la partida o material auxiliar que vamos a ajustar, no tener el
concepto seleccionado.

El campo de entrada admite dos máscaras — máscara de precios y máscara de


rendimientos — seguidas del importe que se desea.

Un asterisco (*) en las máscaras identifica a todos los conceptos, y un guión (-) o la
máscara en blanco, a ninguno. Recuerde que las modificaciones de precios afectan a
toda la obra.

Cambia el último campo de inserción entre PRECIO y COSTE, para


que el ajuste se efectúe sobre uno u otro, incluyendo los costes indirectos o no, según
corresponda.

Efectúa los cambios solicitados.

La función de ajuste hace todas las pasadas necesarias, para que el ajuste resultante
sea el mejor posible con los decimales utilizados, y no haga falta ajustar más que una
vez.

Temas relacionados:

Conceptos avanzados de presupuestos

Ventanas de Propiedades
Ventanas Propiedades, características comunes

Las ventanas de propiedades muestran todos los datos e información que puede
asociarse a un concepto por su Tipo. Cada tipo de concepto tiene una ventana de
propiedades (con una o varias pestañas), y contiene la información única relacionada
con ese tipo y ningún otro. Por ejemplo, un gráfico o un texto puede estar asociado a
cualquier concepto de una base de datos, pero un tipo de cabecera, sólo puede estar
relacionado con un concepto de tipo Carpeta.

IM PORTANTE: Los Tipos de conceptos, tienen 2 formas de aparecer en las ventanas de


propiedades: los que en la ventana Tipos muestran la opción de desplegarse, es que
conforman un Tipo con varias Clases (esto quiere decir, que para ese Tipo hay una sola
ventana de propiedades, pero cada Clase puede añadir o quitar campos o pestañas); los

Ventanas del programa / 122


que no tienen Clases, son un tipo con una ventana de propiedades que no cambia.

Entonces, en todas las ventanas de propiedades de Tipos que tengan varias Clases,
tendrán como elemento común, en la primera pestaña, la lista desplegable Clase de
<tipo>, con todos los posibles para ese Tipo.

TODAS las ventanas de propiedades de todos los tipos tienen en común los siguientes
controles e información:

Primera sección
Puede aparecer la información del concepto actualmente seleccionado en la ventana
principal: su icono (Tipo), Código y Resumen (descripción). Por interés general, si el
concepto es de tipo Elemento, aparece la Unidad, y si es de tipo documento, la Fecha,
porque son datos fundamentales.

Si no tenemos seleccionado un concepto del tipo correspondiente a la ventana de


propiedades, no se muestra ningún dato.

Arriba a la izquierda se muestra el icono correspondiente al concepto seleccionado.


Los datos que se muestran son los del concepto actual de la ventana principal. Estos
datos no cambian cuando vamos seleccionando otros conceptos en la ventana
principal.

A la derecha tenemos el botón Seguimiento que despliega una lista con las
distintas marcas aplicables al concepto para su seguimiento.

Si el concepto tiene gráficos asociados también tendremos el botón Gráficos que


abre la Ventana Gráficos.

Si pulsamos sobre el icono del concepto nos aparece un menu contextual desde el
que podemos acceder a una serie de ventanas de trabajo del menú concepto, como
son: Ventana Textos..., Ventana Valores..., Ventana Términos..., Ventana Gráficos...
y Ventana Paramétricos...; o bien cambiar el icono de la ventana de propiedades en la
que nos encontramos actualmente. Recordamos que el cambio de icono no implica
cambio de propiedades del concepto.

Búsquedas QBE
"Query By Example", significa "búsqueda mediante un ejemplo" de lo que queremos
encontrar.

El conmutador Modo Búsqueda que hay a la derecha de la misma primera sección,

Menú Concepto / 123


activa el modo. Es la máxima expresión en potencia y facilidad de búsqueda dentro de
la base de datos. Permite convertir todas las pestañas de las ventanas de propiedades
en un formulario para realizar búsquedas por múltiples criterios. Este modo funciona
aún sin estar en modo Edición.

Al activar el conmutador, todos los campos de la ventana se ponen en blanco y la


ventana se independiza (desincroniza) del concepto actualmente seleccionado en
ventana principal, mostrando en la cabecera el rótulo: "Búsqueda en propiedades (F1
o F2)".

IM PORTANTE: Si activamos este conmutador manteniendo pulsada la tecla


CONTROL, el título cambia a “MODO: Códigos de campo” y en cada campo se muestra
el nombre que tiene en la base de datos —con el formato habitual nombre_tabla.
nombre_campo—, o el dato al que hace referencia. Esto es útil para realizar informes,
búsquedas avanzadas...

Admite términos en cualquiera de los campos, así como máscaras que permitan
términos parciales, y podemos buscar por todos los campos que queramos en
múltiples pestañas. Pulsando cualquiera de los 2 botones Acepta (que en el modo
normal son Siguiente y Anterior), aparece el resultado de la búsqueda en la ventana
principal.

Ventanas del programa / 124


Para buscar por el Código y Descripción de las líneas que aparezcan en pestañas con
listas de elementos en vez de campos, al activar este modo aparece una pestaña
Búsquedas, con todos los campos por los que se puede buscar.
IM PORTANTE: Si queremos pasar la búsqueda que hemos realizado a una carpeta de
búsqueda para tenerla accesible continuamente, podemos copiar la sentencia SQL
que se realiza teniendo abierta la ventana Propiedades de carpetas, que al no estar
sincronizada con un objeto de tipo carpeta, presenta en este caso la sentencia del
concepto .. (un "concepto" virtual que representa la última búsqueda realizada).

Bloqueo de conceptos
Cuando tenemos activado el sistema de bloqueo de edición de conceptos en la
ventana Parámetros generales, se muestra un botón en la parte derecha de todas
las ventana de propiedades. Si lo pulsamos, el concepto queda bloqueado contra
edición incluso para el usuario actual, y el icono del botón cambia. Sólo un usuario
con permisos de administrados puede desbloquear estos conceptos bloqueados.

Colores en los rótulos de las pestañas


Las pestañas que componen distintos grupos de información dentro de cualquier
ventana de propiedades, tienen un código de colores:

Negro.- pestaña que contiene datos propios del concepto (a los que se accede
además de en la ventana principal, en campos de edición de esta ventana de
propiedades, por comodidad), y datos únicos particulares de este tipo de propiedad.

Verde.- pestaña que permite visualizar datos de relaciones con otros conceptos, los
datos anexos a esa relación, normalmente se introducen en las ventanas de
propiedades de los otros objetos.

Rojo.- pestaña que incluye datos calculados (es decir, algunos no existen grabados
en la base de datos) Estos cálculos se realizan en el momento de entrar en la
pestaña, con los datos que hay en la base en ese momento, por ejemplo, la
valoración de unos precios en función de las cantidades en stock, el precio al que
se compraron, la fecha, etc.

Azul.- pestaña con datos que pueden ser calculados (rojo) o no, pero que no están
relacionados directamente con el concepto actualmente seleccionado en la
ventana de propiedades, sino que representa datos para el Tipo actual de concepto,
pero en TODO el proyecto.

Subpestañas Descripción, Observaciones y Concepto


En la primera pestaña de cualquier ventana de propiedades, siempre hay un par de
subpestañas con datos básicos, que pueden tener otras con datos más importantes o
de uso más frecuente delante: normalmente son las dos últimas subpestañas.

La de Descripción es el mismo texto extenso sin clasificación de la ventana Textos.


El texto multilínea de Observaciones es un campo de la propia tabla de propiedades,
para tener uno por concepto, pero independiente del texto general. Esta pestaña no
aparece siempre.

En la de Concepto, se muestran los mismos campos que en ventana principal, para

Menú Concepto / 125


tenerlos más accesibles, con los datos de propiedad del concepto: Clase, Resumen,
Código y el primer gráfico asociado (si es que lo tiene), que suele servir para
identificar al concepto.

Campos y Botones de Referencias a conceptos y clasificaciones


Algunas ventanas de propiedades (no todas), tienen campos con un botón a la
derecha. Esos campos hacen referencia a otros datos de otras ventanas de
propiedades o de la base de datos. Las referencias pueden ser de varias clases:

El formato de estos campos de referencias depende del modo elegido en la ventana


Opciones.

1. Los que tienen una marca de color amarillo, con el rótulo Clasificación por <rot>,
hacen referencia a valores que hay en los tipos de la ventana Clasificaciones.
Al pulsar el botón, se abre la ventana que muestra el rótulo: clasificación (Tipo)
código, y la lista de Códigos y Descripciones para ese campo, es decir, todos los
rótulos almacenados en la base de datos, para ese tipo.

Al teclear datos en estos campos, dependiendo del formato de referencias,


funciona de las siguientes maneras:

a. Si el campo es de formato Código · Resumen (aunque por alguna opción de


visualización no se muestre el Código), al teclear un texto, se buscará según el
formato de referencias seleccionado. Tanto para introducir (buscar) una
clasificación existente, como para darla de alta si no existe, podemos forzar el
formato poniendo detrás o delante el punto separador (·). Por ejemplo, al teclear
en un campo "m" si tenemos seleccionado Defecto descripción, nos mostrará
todos los posibles rótulos para ese campo que contengan la letra 'm'. En cambio,
al teclear "m·" buscará siempre en Códigos y tecleando "·m" siempre en
Descripciones.

b. Si Código y Resumen están en campos separados, cada uno admitirá la


búsqueda sólo en su campo, y al teclear Códigos o Resúmenes inexistentes, se
propondrán como nuevos respectivamente.

2. Los que tienen una marca de color azul, hacen referencia a otros conceptos de
la base de datos de otros Tipos distintos al actual. Al pulsar el botón se abre la
ventana de propiedades de ese Tipo, con el concepto al que hace referencia el
campo.

Por ejemplo, un campo "Entidad" mostraría la ventana de propiedades de Entidades


con los datos de la actual. También hay campos de este tipo que no se componen
de un par Código · Resumen, y admiten múltiples valores separados por punto y
coma (;)

3. Un caso poco frecuente es una referencia a un archivo externo a la base de datos


(marca de color verde: ), en este caso, el botón muestra un diálogo estándar de
abrir archivo para seleccionar uno.

Campos de entrada de texto


Las ventanas de propiedades tienen unos cuantos campos de texto, que representan
datos de otras ventanas o campos, pero que por comodidad de acceso o restricción de

Ventanas del programa / 126


permisos, es más conveniente que se encuentran juntos en la ventana de datos. Los
comunes a todas las propiedades son Código y Resumen, que son los propios del
concepto en la ventana principal, y el campo Descripción que corresponde con el texto
de la ventana Texto. En cualquiera de los dos lugares en que aparecen estos datos,
pueden modificarse.

Tecleando datos
Existen ayudas especiales para la introducción de datos. Siempre entre conceptos del
mismo tipo:

1. Se pueden tomar como plantilla los datos de propiedades de otro concepto del
mismo archivo u otro, para copiar campos en varios conceptos del mismo tipo. La
copia se realiza en el campo correspondiente, poniendo una coma (,) como si se
tratara de la ayuda en campos que se explica en Uso del teclado.

2. Se pueden reproducir campos en una multiselección de conceptos (copiar a todos),


poniendo el cursor en el campo que deseamos copiar, y seleccionando en la
ventana principal todos los conceptos que queramos que tengan ese valor en ese
campo. Al pulsar el botón Repite, que sólo se muestra activado cuando en la
ventana principal hay seleccionado más de un concepto, se realiza la copia del
dato seleccionado.

3. Una posibilidad muy útil es pulsar la tecla F9 en un campo de referencia a una


tabla de Clasificaciones (botón ). Se muestra la ventana Clasificaciones, abierta
en la pestaña Actual, con la lista de posibles valores para ese campo. tecleando
una máscara de búsqueda SQL en el campo de edición Código o Resumen (ya que
la ventana no pierde el foco), introducimos el deseado.

Cabeceras de lista
Por encima de la cabecera de una lista en cualquier pestaña o panel, puede aparecer
un pequeño botón con marca azul, Lista a ventana principal, que realiza la misma
función que una búsqueda, ya que nos muestra en ventana principal los datos de la
lista.

Cuando una ventana de propiedades (e incluso ventanas de datos que no son de


propiedades) tiene alguna lista de elementos, conceptos, valores... con botones de
cabecera que muestran un asterisco, se está indicando que no se trata de un rótulo
alfanumérico libre o un valor numérico, sino una referencia bien a un concepto, o
bien a un rótulo de clasificaciones. La ventaja de estas columnas de campos, es que
en general, al hacer doble clic sobre la línea, abrimos la ventana de propiedades del
concepto al que se hace referencia, pero además, esta columna es sensible A SU
PROPIA referencia.

Por ejemplo, en la pestaña Descomposición (relaciones inferiores) de la ventana


propiedades de Varios. El campo Concepto con una máscara únicamente puede
mostrar una lista de conceptos y además no se admite teclear otro Código o Resumen
que no sea el de un concepto. PERO además, haciendo doble clic en cualquier línea
en esa columna, se abre la ventana de propiedades del concepto correspondiente.

A la derecha de cualquier barra de botones de cabecera de lista, tenemos un pequeño


icono de Ms-Excel con el texto Lista a Excel, que tiene el uso explicado en el tema de

Menú Concepto / 127


controles habituales.

Barra de botones al pie


/ En una ventana que no sea la principal,
tienen el efecto de recorrer hacia delante y atrás, las múltiples fichas o elementos
del mismo tipo, cuyo contenido se muestra en esa ventana.

Permite asignar los mismos campos de propiedades (todo el


contenido de la ventana) a múltiples conceptos a la vez, tecleando los datos una sola.
Muy cómodo para crear conceptos con datos similares.

Funciona multiseleccionando en ventana principal los conceptos que deseemos y


pulsando el botón

Permite crear desde la propia ventana, conceptos nuevos del


mismo tipo que tenemos en la ventana propiedades, mediante el diálogo Nuevo. El
nuevo concepto se incorpora en la base de datos en el lugar que tenga
predeterminado en la columna Proyecto > Tipos de conceptos > Caminos conceptos
nuevos. Cuando este campo está en blanco para el tipo actual, queda suelto o
descolgado en la base de datos, pero sus propiedades son igualmente, las que se
muestran en esta ventana.

Muestra el diálogo Selección de informes, con una configuración


similar a la ventana Imprime, pero simplificada para utilizar informes contextuales
sólo a la ventana desde la que se lanza.

IM PORTANTE: En cuestión de informes, cuando la ventana de propiedades y el


concepto actual de la ventana principal están desincronizadas, a los informes se les
pasan 3 variables: actual (identificador del concepto en la ventana de propiedades),
título (rótulo con el Tipo·Clase de ese concepto) y subtítulo (el resumen de ese
concepto). En ese caso, bas.actual es el identificador del concepto de la ventana
principal. Lanzando los informes desde la ventana de informes y procedimientos, las
tres variables tienen el valor "undefined" y debemos tratarlas en consecuencia, si
estamos programando informes.

Ventana Propiedades: Capítulo

Cuando el concepto actualmente seleccionado es de tipo Capítulo, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Propiedades o la de Concepto > Propiedades > Capítulos, o haciendo doble clic
con el ratón sobre el icono de Tipo), se muestra esta ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el rótulo <tipo> · <clase>

En este caso, según la Clase, la ventana casi no cambia ni de aspecto, ni de


funcionalidad ya que la diferencia es más bien conceptual:

Ventanas del programa / 128


La clasificación jerárquica (capítulos y sub-capítulos de organización) se lleva a cabo con
los conceptos de Tipo Capítulo genéricos (sin ninguna Clase asignada). Esto permite que
relacionado "bajo" un capítulo -como si fuese un directorio-, agrupemos conceptos de
cualquier Tipo, incluidos otros Capítulos.

Propiedades de búsqueda SQL


Los Capítulos con una búsqueda SQL asociada, muestran como "hijos" los conceptos o
relaciones que son el resultado de la cláusula SELECT, es decir, siempre se realiza la
misma búsqueda, pero dependiendo de los conceptos que tengamos en cada momento
en la base, el resultado puede cambiar: los descendientes no son explícitos, sino que
vienen definidos por la búsqueda.

IMPORTANTE: observe que una sentencia de búsqueda siempre comienza con la


palabra clave SELECT, el icono del Tipo genérico sin Clase pasa de a tener la
apariencia . Cualquier otra cosa en este campo, no produce ningún efecto.

Además de una sola sentencia SQL, se admite una función con un nombre especial,
que permite hacer una búsqueda compleja, con varios funciones, etc. siempre que el
resultado de la función sea una lista de identificadores de las tablas CON ó RCC. Más
adelante se ve un ejemplo.

La ventana de propiedades muestra las pestañas siguientes:

Pestaña Capítulo:
Clase de capítulo define como en todas las ventanas de propiedades, la Clase del
concepto que está mostrando.

Cabecera de lista de hijos: Permite introducir un nombre para la configuración de


cabecera de sus descendientes, si queremos que sea distinta de las demás. Si
aparece en blanco, será igual a todas las que están en blanco (la de defecto), y de
forma análoga, podemos utilizar ese nombre de configuración en cualquier otro

Menú Concepto / 129


capítulo —al cambiar cualquiera de ellas, cambian todos los capítulos que utilizan esa
configuración—.

Doble altura en lista de hijos: Permite que las líneas de conceptos descendientes del
capítulo (sean hijos reales o el resultado de una búsqueda) se muestren con un icono
de tamaño doble que el habitual, el tamaño de la fuente de texto también es el doble y
los iconos de tipo, también.

Vista en modo diapositivas: Fuerza que los hijos (sólo los directos del capítulo) se
muestren como un panel de diapositivas ordenadas de izquierda a derecha, en vez de
una lista de líneas. En la diapositiva se mostrará el primer gráfico asociado, si tiene,
y sino, el icono correspondiente. La navegación se puede realizar con los clic
izquierdo y derecho del ratón, de la forma habitual. Es similar al modo que podemos
manejar en la ventana Opciones, pero sólo para algunos capítulos en concreto.

Actúa sobre el paralelo: Es una marca especial para hacer que se abra la ventana
del paralelo y se realice la búsqueda, o bien se ejecute en ella la función de
JavaScript, si fuera de esa Clase.

Búsqueda SQL o procedimiento JS


Aparece un campo de texto multilínea que solamente permite introducir una
búsqueda en lenguaje SQL con unas limitaciones muy particulares:

1. El resultado de la búsqueda deben ser identificadores de conceptos o relaciones


que se mostrarán como descomposición del capítulo; serán hijos "virtuales" del
capítulo a diferencia de cuando el campo Clase está en blanco (se trata de un
concepto Capítulo genérico) y la lista de hijos son unas relaciones explícitas.

2. Las sentencias SELECT siempre deben devolver una lista de identificadores


(procedentes de conceptos o de relaciones), por lo que detrás de "SELECT" siempre
irá el nombre "ide" o un campo de una tabla, que contenga identificadores.

3. Detrás del "FROM" siempre irá el nombre "con" (la tabla de conceptos),
"rcc" (relaciones) o cualquier tabla de propiedades de la que pueda seleccionarse
un campo con identificadores.

4. Además se admiten unas macros particulares del programa, no de SQL, que


amplían la potencia de la propia SELECT:

<<rótulo>> se sustituye toda esta cadena por el valor introducido en el diálogo


que se muestra con el texto explicativo: rótulo

<ide> = se sustituye por el identificador del concepto actual seleccionado en la


ventana principal

[[macro]] se sustituye cualquiera de las siguientes macros por sus valores:

hoy - Fecha actual completa (en Parámetros generales, puede haberse puesto
una distinta a la actual del sistema).

hoymes-1 - Mes anterior

hoyano-1 - Año anterior

Ventanas del programa / 130


hoymes1 - Fecha del primer día de mes de la fecha actual

hoymes2 - Fecha del último día de mes de la fecha actual

hoyano1 - Fecha del primer día del año de la fecha actual

hoyano2 - Fecha del último día del año de la fecha actual

Esto añade potencia para modificar mediante parámetros las búsquedas (así el
comando de búsqueda no es fijo con un nombre de tabla o de campo, sino que el
programa pide al usuario una máscara, nombre de tabla, texto, etc.)

5. También se puede definir una función con el nombre fijo sqljs() que devuelva una
lista de identificadores de la tabla CON ó RCC. Esto permite definir funciones
complejas y utilizar varias incluso. Así las búsquedas se comportan como un
capítulo de procedimiento JavaScript, con la ventaja de que cuando vemos su
descomposición, se muestra el nombre del capítulo como padre, y podemos
navegar con los botones Siguiente y Anterior entre búsquedas.

EJEM PLO 1:

La función más sencilla:


function sqljs()

var bas=Cbas;

return bas.buscaN("select ide from con");


}

es equivalente a la línea:

select ide from con

EJEM PLO 2:

La sentencia:

select ide from con where tip=3 and

(select count(com) from rcc where rcc.des=con.ide)=1

order by <<Campo de ordenación>>

muestra un diálogo con el rótulo:

Parámetro
Campo de ordenación

y busca los descompuestos de la tabla de conceptos, que sea de tipo Referencia


externa y que en el campo padres de la tabla de relaciones solamente tenga uno. La
ordenación de la lista resultante la realiza por el campo que se introduzca en el
diálogo.

Menú Concepto / 131


EJEM PLO 3:

Otra SELECT permitida sería:

select rcc.ide from rcc

Botones:

Permite ejecutar la búsqueda desde la ventana, sin


tener que ir al concepto en ventana principal, y de esta forma ver más rápidamente
el resultado, e ir probando.

Permite recuperar el contenido que tenía la ventana


cuando la abrimos, como casi siempre en todas las ventanas del programa.

Permite relacionar la búsqueda actual con uno de los


tipos y clases básicos de conceptos. De esta forma, en el menú contextual de la
columna Tipo o en el submenú Concepto > Concepto actual, se mostrará como
última opción esta búsqueda, pero sólo en los conceptos de ese Tipo o Clase. El icono
del Tipo o Clase seleccionado, se muestra a la derecha del botón y así siempre
sabemos a cuál pertenece.

Las pestañas Descripción y Concepto ya se explicaron en el capítulo Ventana de


propiedades, características comunes.

Pestaña Cabeceras particulares:


Esta pestaña tiene un uso igual a la siguiente: Cabeceras comunes, sólo que el
ámbito de cabeceras definido aquí tiene como ámbito sólo el archivo de B.D. actual.
Este uso es menos común, y por eso se detalla el uso en la siguiente pestaña.

Pestaña Cabeceras comunes:


El ámbito de estos formatos de cabeceras y campos, es el programa. Las definiciones
que aquí se dan, se graban en un archivo externo y se pueden utilizar en todas las B.
D.

Se compone de una lista multilínea que muestra todas las configuraciones de


cabecera de listas que hay definidas para el archivo de base de datos actual. La
pestaña se muestra en color azul por esa razón: los datos de esta pestaña NO son
contextuales al concepto Tipo Capítulo seleccionado, sino comunes a todo el archivo.
Los datos de esta pestaña se guardan el campo bas.cab.carcab de la B.D. (tabla de
cabecera).

IM PORTANTE: Esta configuración de campos, no es la que obligatoriamente se va a


mostrar en la ventana principal, sino que define los datos QUE SE PUEDEN mostrar y
elegir en el menú contextual de cabecera de listas.

En el campo Campos definibles (uno por línea), podemos definir cada campo, con la
sintaxis que se muestra en el rótulo:

Ventanas del programa / 132


La notación de este formato es la siguiente: lo que va entre corchetes '[ ]' significa
que es opcional y puede no ponerse, las llaves '{ }' indican opcional y además que se
puede repetir varias veces de la misma forma, y los demás caracteres son literales,
es decir, que son caracteres para teclear '· : @ |'. Los dos términos en negrita son los
únicos obligatorios SIEMPRE en cada definición de campos.

El orden de las líneas de campos se tiene en cuenta, y es el que permite personalizar


el orden de las columnas de izquierda a derecha en la ventana principal.

Cada campo puede tener definido un código cabecera (por el que se la identifica y que
se asigna en la pestaña Capítulo), si no lleva nombre de cabecera, se considera que
es para todos los Tipos y situaciones de conceptos.

El código cabecera se usa para definir en qué estado — como padre, como hijo, etc.—
va a aparecer el campo. Es decir, si queremos que se asocien las cabeceras
AUTOMÁTICAMENTE SEGÚN EL TIPO DE CONCEPTOS, la primera parte del código
debe coincidir con las 3 ó 6 letras del nombre de la tabla, y estar seguido de uno de los
indicadores: 1-concepto como padre, 2-concepto como hijo.

Cada campo debería tener un rótulo que será el texto que aparece en el botón de
cabecera. Obligatoriamente, una tabla a la que se refiere, y un campo que es el que
queremos mostrar.

El signo menos (-) delante de la tabla, indica que no mostrará campo de edición.

Se incluye el carácter arroba (@) para especificar campos virtuales (no existentes en
campos de la B.D., pero accesibles como si lo estuvieran).

El código que va detrás de la tabla separado con una barra (|), sirve para identificar
uno de los valores de tablas que se componen de rótulos (relaciones de tablas N a N).

Ejemplo:

1 // General
2 Pendiente:con.pen
3 Cod_Res:con._codres
4 Estado:doc.est.res
5
6 // Capítulos
7 car1·Mantenimiento:
8 tex|man.tex
9 car1·Cantidad:rcc.can
10 car2·Proveedor:doc._ent
11
12 // Otros
13 var1·Antigüedad:con.
fecant
doc1·Contrato:doc.cnt

Menú Concepto / 133


LIN 1: Se admiten líneas que comiencen con doble barra inclinada (//) como
comentarios que no se tienen en cuenta al interpretar los campos

LIN 3: En el campo 'Cod_Res' mostramos un campo virtual -contiene el contenido de


otros dos campos para mayor facilidad de acceso: código (cod) y resumen (res)-.

LIN 4: Accedemos al campo 'Estado' de documentos, que es una referencia a un


rótulo (tabla ROT), y mostramos la descripción de ese rótulo concatenando los
campos directamente.

LIN 8: 'Cantidad' muestra (si lo abrimos en la ventana principal), la cantidad que ya


existe como campo, pero nos sirve para ver que podemos mostrar un campo
predefinido en otra posición que la que ya tiene. Se muestra donde haya un
capítulo como padre (car1·).

LIN 9: Muestra un campo de documentos, cuando aparezcan capítulos como hijos


(car2). Si en un nivel de la estructura aparecen capítulos a la vez como padre y
como hijos, sólo aparecen los campos definidos para hijos.

LIN 12: En las listas de Elementos (o Tipo Varios), podemos mostrar en el campo
'Antigüedad' una fecha SÓLO SI tenemos definido en la ventana Valores, un valor
'fecant', ya que este campo no existe en la tabla CON (concepto). Lo mismo sucede
con el valor 'pendiente' de la línea LIN 2.

LIN 13: 'Contrato' muestra un campo de documentos, sólo donde tengamos


documentos como padre (lo que no es habitual).

Propiedades de programa JavaScript


Muestran en la ventana los mismos campos y pestañas que la Clase "Búsqueda SQL",
pero ejecuta un programa JavaScript que puede realizar cualquier operación con las
ventanas de la aplicación o los datos de la base, en vez de realizar una búsqueda.

La única diferencia en interface, es que en la primera pestaña aparece en el campo


multilínea el rótulo Búsqueda SQL o procedimiento JS, indicando que no se trata de
una sentencia SELECT de SQL, sino cualquier programación en lenguaje estándar
JavaScript (hay una referencia completa en la ayuda anexa, y una referencia
sencilla en el tema Lenguaje JavaScript, además con la potencia de las extensiones
COM añadidas por el programa.

IM PORTANTE: Observe que un capítulo de Clase programa JavaScript, determina


que el icono del Tipo genérico sin Clase pase de a tener la apariencia .
Cualquier otra cosa en este campo, que no se pueda interpretar sin errores de
programa JavaScript, no tiene ningún efecto.

Ventana Propiedades: Elemento

Cuando el concepto actualmente seleccionado es del tipo genéricos Elemento, al abrir la


ventana de propiedades del conceptos de cualquiera de las formas posibles (mediante la

Ventanas del programa / 134


opción Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades
Elemento, o haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta
ventana.

La primera sección muestra la información del concepto seleccionado (si el que hay es
de este Tipo, o alguna de sus Clases) y los demás controles habituales en las ventanas
de propiedades.

El Tipo Elemento genérico (sin ninguna Clase particular) representa las actividades o
partidas de obra en las que se dividen los capítulos de un proyecto. A su vez se
descomponen en Recursos simples.

Propiedades de Unidades de obra

Pestaña Elemento:
Como campos especiales tiene: Categoría, que tiene a su derecha el botón
Clasificación por Categoría para permitir seleccionar uno de los nombres definidos
en la ventana Clasificaciones, y a más importante y que caracteriza a la Unidad de
obra: Unidad de imputación que es una referencia al concepto con el cual se
relaciona a efectos de control de costes.

Los campos de las sección inferior son los comunes en todas las pestañas generales
de las ventanas de propiedades. (Descripción es el mismo dato de la ventana Texto,
repetido aquí. La edición también se puede realizar desde los dos sitios).

Pestaña Descomposición:
Muestra la lista de relaciones inferiores en la base de datos, tal como se pueden ver
en la ventana principal. Tanto en esta pestaña como en la ventana principal, se
pueden dar de alta, de baja, y modificar conceptos. Como en todas las listas de este
tipo, el doble clic sobre una línea, nos abre la ventana de propiedades
correspondiente.

Menú Concepto / 135


Pestaña Tareas de la unidad:
Es una lista de conceptos similar a la anterior, pero en esta sólo hay relaciones con
conceptos de Tipo Tarea. Una Unidad de obra o auxiliar puede tener asociada más de
una. Desde los campos de esta lista podemos modificar los datos de inicio,
finalización y porcentaje de peso de los recursos, igual que en la ventana de tareas.

Propiedades de Unidades auxiliares

Básicamente contiene los mismos datos, cambiando que en la pestaña Elemento , el


concepto con el que se relaciona de forma unívoca no es una Unidad de imputación,
sino otra Clase de Centro de coste: un Centro de producción.

En la pestaña Descomposición vemos una lista de relaciones inferiores, pero en este


caso se trata de la descomposición de Recursos de la Unidad auxiliar.

Ventanas del programa / 136


Por último, en vez de la pestaña Tareas, tenemos Documentos relacionados, ya que el
control de la "fabricación" de estas unidades se hace a través de Albaranes, como si
fuese un Material, y no a través de Tareas, como si fuese una partida de obra.

Para usuarios avanzados:


La tabla de propiedades de Elementos sin Clase (genéricos), puede parecer — por su
falta de datos o campos —, la menos interesante, y en cambio es la que nos permite
ampliar la estructura de datos que necesitamos, si los Tipos que tiene la aplicación
no son suficientes.

La personalización se realiza a través del campo Categoría, que nos permite el acceso
a la ventana Clasificaciones, donde podemos introducir los valores que necesitamos,
y luego utilizar conceptos con esos valores, y los datos (en el campo Descripción) y
descomposición que queramos.

Por ejemplo:

agente: Nombre, Dirección y Teléfono. coche: Matrícula y Color. seguro: Fecha,


Importe...)

Ventana Propiedades: Referencia

Cuando el concepto actualmente seleccionado es del tipo genérico Referencia, al abrir


la ventana de propiedades del conceptos de cualquiera de las formas posibles (mediante
la opción Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades
Referencias externas, o haciendo doble clic con el ratón sobre el icono de Tipo), se
muestra esta ventana.

La primera sección muestra el conmutador Desincroniza, información del concepto


seleccionado y los demás controles habituales en las ventanas de propiedades. Además
cuenta con un botón Valores que nos abre la Ventana Valores asociada al concepto.

Menú Concepto / 137


Pestaña Referencia:
Los campos Código y Resumen, y el multilínea Descripción, permiten introducir los
textos habituales relacionados con ese concepto (es el mismo dato de la ventana
Texto, repetido aquí. La edición también se puede realizar desde los dos sitios).

Categoría: Permite introducir una clasificación de referencia, o seleccionarla


mediante el botón Clasificación por Categoría que tiene a su derecha, para permitir
seleccionar uno de los nombres definidos en la ventana Clasificaciones

Archivo: Admite el camino completo del archivo al que hacemos referencia y


Parámetros permite incluir una serie de valores (en general separados por espacios
en blanco), para ejecutar el archivo.

Pestaña Vista rápida:


Consiste en un control Active-X de "browser" o control de navegador similar al
Explorador de Windows. Si en el campo Archivo tenemos un programa ejecutable, o
un programa en JavaScript, se ejecutarán (ATENCIÓN: dependiendo del nivel de
seguridad que tenga en Windows, pueden aparecerle mensajes de confirmación para
verificar que quiere ejecutar el programa, o que no tiene firma de autenticación).

Si tenemos el camino de un documento de tipo texto (.TXT), HTML (.HTM), una


imagen de algún tipo que tengamos asociado a nuestro navegador de Internet, un
videoclip (.AVI, .MPG), etc., se mostrará en la propia ventana.

Ventanas del programa / 138


Si la referencia es a un documento registrado en una aplicación externa a los que
contiene el sistema Windows (por ejemplo, un archivo gráfico de CorelDraw (.CDR), de
AutoCAD (.DWG), un documento de Ms-Word (.DOC), se abrirá el programa
correspondiente mostrando el documento.

Si la referencia es solamente un nombre de directorio, sin nombre de archivo, se


mostraran del archivos y carpetas de ese directorio y tendremos una ventana con la
que navegar por el disco, CD-ROM o unidad de red.

, y tienen los usos habituales


en todas las ventanas de propiedades

Ventana Propiedades: Entidad

Cuando el concepto actualmente seleccionado es del tipo Entidad, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Entidad, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el rótulo <tipo> · <clase>. Todas las Clases de entidades tienen los mismos
datos, diferenciándose en el nombre, para poder utilizarlos de forma inteligente en
distintos sitios.

Además de los datos y controles habituales en las ventanas de propiedades, en la


primera sección de esta hay dos botones especiales:

Nuevo correo electrónico: Para crear un mensaje nuevo de e-mail a la dirección que
tenemos en el campo correspondiente de la primera pestaña.

Abre dirección web: Abre el navegador de Internet que tengamos instalado en Windows,
con la dirección que hay en el campo correspondiente.

Pestaña Entidad:
Se almacenan los datos básicos de concepto, y además varios campos que definen
una entidad empresarial, gubernamental o personal de cualquier tipo: Nombre, CIF,
Teléfono, Fax, Correo electrónico y Dirección web... (si alguno de estos dos últimos
campos no tiene dato, los botones asociados, no tienen ningún efecto). En este grupo
se mezclan datos que son habituales en formatos de intercambio, con algunos
particulares de Menfis para información relevante de una entidad física o jurídica.

El CIF, como función especial, añade el código de letra que corresponde a los dígitos
numéricos y sirve para comprobar que el número es válido.

Menú Concepto / 139


La clasificación Familias de recursos, solamente aparece si hay alguna Clase de
entidad seleccionada (si se trata de una entidad sin Clase no aparece este campo); es
un campo que admite una lista de múltiples clasificaciones separadas con punto y
coma (;). Para la introducción de varias clasificaciones, podemos poner una máscara
de Código o Resumen en el campo (con lo que aparecerá el diálogo selección de
Familias de recursos), o bien introducir un rótulo completo, teclear un punto y coma
detrás, y otra máscara u otro rótulo.

Personas de contacto
Dentro de esta subpestaña se nos presenta un campo multilínea donde podemos
introducir tanto personas de contacto como cualquier otro tipo de anotación
referente al contacto con entidades.

Las subpestañas Descripción y Concepto son campos comunes a las ventanas de


propiedad y están definidas en el capítulo Ventanas Propiedades, características
comunes

Pestaña Direcciones
Se ofrecen 3 secciones para almacenar distintas direcciones. El campo Provincia, se
rellena automáticamente cuando cambiamos o introducimos un nuevo campo
Localidad correspondiente, aunque también podemos introducirlo manualmente si no
seleccionamos una Localidad. Esta asociación automática se hace mediante el código
de la clasificación: si el código de la Localidad comienza con 28xxx, y existe una
clasificación de Provincia con el código 28, por ejemplo, se colocaría esta
automáticamente.

Ventanas del programa / 140


(Recuerde que los campos que tienen a la derecha un botón con una marca amarilla,
pueden tener valores de Clasificaciones).

Pestaña Datos económicos


Tenemos varios campos de clasificaciones, para rellenar con la lista de datos que
creamos conveniente, y unos para datos numéricos (IVA y Recargo de equivalencia).
La siguiente sección admite un número completo de cuenta (20 dígitos), además de
un rótulo clasificado -Clasificación por entidad bancaria-, de nombres de entidades.
Al introducir los datos de Entidad, se toma el código de la clasificación como código de
entidad, y con el de sucursal (que puede llevar el nombre o dirección a continuación,
y los 10 dígitos del Nº de cuenta, en el campo que no es editable aparecen los 2 dígitos
de control que permiten verificar que el número completo es correcto.

Pestaña documentos
En esta pestaña podemos ver y acceder a todos los documentos asociados a esta
entidad.

Menú Concepto / 141


Pestaña Recursos asociados
Lista de Tipo · Código · Resumen, sólo para consulta, y como forma de acceder
rápidamente con un clic a los conceptos que hacen referencia a la entidad actual,
sea del Tipo o Clase que sean.

Ventana Propiedades: Centro de coste

Cuando el concepto actualmente seleccionado es de tipo Centro de coste, al abrir la


ventana de propiedades del conceptos de cualquiera de las formas posibles (mediante la
opción Concepto > Ventana Propiedades o la de Concepto > Propiedades > Tipo Centro de
coste, o haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta
ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el rótulo <tipo> · <clase>

Como en este caso, según la Clase, la ventana cambia bastante de aspecto y


funcionalidad, vamos a dividir la documentación según la clase:

Propiedades de Almacén de materiales (AM A)

En general, de los conceptos de Tipo Centro de coste que tenemos, el único que se
refiere a una ubicación específica para guardar materiales comprados, es esta Clase.
Los demás son contenedores virtuales o 'fábricas' en las que entran gastos, materiales
u horas consumidos, y salen unidades de obra o materiales construidos.

Ventanas del programa / 142


Pestaña Centro de coste:
Una característica común a todas las Clases de Centros de coste, es la sección de
conmutadores llamada CEC de defecto para. La palabra clave aquí es 'defecto', que
determina que el centro de coste (en este caso el Almacén) es centro de coste de
defecto para los recursos de las clases de recursos seleccionadas -habitualmente en
almacenes, suelen ser Materiales-. Se muestran todas las clases de recursos.
Cuando no se especifique un centro de coste concreto, operando con los recursos
elegidos, se mostrará el centro de coste actual.

IM PORTANTE: Esta asignación es exclusiva entre centros de coste considerando


todas las clases, y sólo puede haber uno para cada clase de recurso, y por lo tanto,
cuando asignemos como defecto para un recurso cualquier centro de coste, la marca
se quitará del conmutador de cualquier otro que lo fuera antes.

La asignación tiene bastante utilidad sobre todo en el caso de utilizar


mayoritariamente los mismos centros de coste para imputar o bien, cuando no
tenemos más que uno de cada clase, por ejemplo, y siempre utilizamos el mismo,
claro. Así no se nos complica su gestión al ser automático.

Cuenta analítica: Es otro de los campos comunes a todos los CECs (centros de coste)
y sirve para identificar la imputación al hacer la exportación para la conexión a
Sigrid

Aparte tenemos las pestañas Descripción y Concepto con los datos habituales en la
ventanas de propiedades: Clase, Código, Resumen y Texto.

Pestaña Documentos:
Ofrece una lista de documentos en los que se hace referencia al Almacén actual
(esto es común a todos los centros de coste). Las relaciones sólo pueden ser con
conceptos de Tipo Documento y Clases: Albarán (para reflejar las entradas de
materiales), Movimiento (entre almacenes o de entrada / salida de cada almacén), y
de Partes de trabajo (similares a los Movimientos en su funcionamiento). El campo
Descripción se corresponde con el texto extenso de la subpestaña Descripción
alternativa.

Menú Concepto / 143


Pestaña Situación:
Estos cálculos son contextuales a la fase actual. Al pulsar los botones de Calcular (...),
muestra las cantidades en partes, albaranes, movimientos, estradas y salidas a
origen y parcial (todos los datos relacionados con el Almacén).

Estos datos son útiles para controlar cada almacén, al margen de los documentos
relacionados con el mismo: es el contenido TEÓRICO en el momento actual, y la lista
nos muestra cada uno de los recursos almacenados, con las cantidades que
muestran los movimientos: se pueden mostrar los campos Albarán, Movimiento y
Parte tanto origen como destino (entradas y salidas del almacén respectivamente).
También los campos de balance final, Entradas (registradas a través de movimientos
de entrada o compras mediante Albaranes), Salidas (también a través de
movimientos y construcción de unidades de obra a través de unidades de imputación)
y Existencias (muestra el cálculo de Entradas-Salidas, que debemos comparar con las
existencias reales cuando queramos hacer inventario). La comparación de estas
cantidades idealmente debería coincidir. Si tenemos más cantidad en existencias
que en la realidad, detectamos un error en los documentos del programa y si la
cantidad es menor, se debe a mermas por pérdidas, roturas, etc.

y permiten realizar todos los


cálculos y mostrar los datos de cada recurso (en el caso de A origen, no sólo para la
Fase actual a la que son contextuales los cálculos, sino desde el origen de proyecto).
El botón Montar movimiento con diferencias, permite crear un Documento de Clase
Movimiento con las líneas y cantidades que aparecen en Existencias (sean a origen o
parcial), poniendo ya en cada línea como CEC origen el almacén. Estas cantidades y
líneas debemos modificarlas cuando hagamos un inventario del almacén real y
veamos las diferencias.

Ventanas del programa / 144


Propiedades de Cuenta de Amortización (CUA)

Representa "hitos" de consumo para dividir un consumo o compra de recursos en varias


Fases. Como ejemplo, imagine un Albarán que llega durante la 2ª fase de la obra, en el
que nos cobran una caseta de obra, y la vamos a utilizar durante 5 meses: Sería un
error en el seguimiento de obra imputar todo el importe en la fase 2 cuando se va a
amortizar usándola durante varios meses. Para este tipo de recursos utilizamos una
cuenta 'virtual' en la que podemos introducir consumos e irlos periodificando en las
fechas que deseemos, para repartir de manera justa los importes amortizables.

El campo UNI de la amortización, relaciona cada CUA, con una unidad de imputación,
para hacer imputaciones automáticas periódicas. El campo Nº de fases de la
amortización indica si la amortización en cada fase es proporcional a la producción total
de la fase (cuando no ponemos ningún valor) o en un número fijo de ellas a partir de la
compra (si indicamos un número en el campo).

La amortización se realiza creando automáticamente un documento Movimiento con


CEC origen la CUA, CEC destino su UNI, y la fecha del último día de la fase, cuando
ejecutamos el procedimiento de cerrar fase. Como se puede lanzar varias veces, el
procedimiento controla que no se cree más de un movimiento de amortización. La
amortización de todas las cuentas de periodificación se realiza en un único documento
de movimiento.

En la pestaña Situación, es de igual funcionalidad que la del almacenes, sólo que en


vez de Existencias, tenemos por recurso un campo de resultado final CyP (consumo y
producción=entradas-salidas).

Puede generar manualmente el movimiento de


amortización, sin tener que hacerlo en el cierre de fase. Los cálculos a origen y parcial
son de consumos reales.

Propiedades de Unidad de imputación (UNI)

Es el centro de coste principal, ya que todas las salidas de los demás, terminan como
una imputación. Además, representan centrales de construcción de partidas de obra:
cada unidad de imputación es como una fábrica en la que entran consumos de recursos
a través de Albaranes y salen partidas de obra construidas.

Los consumos son reales y se incluye una pestaña fundamental:

Pestaña Unidades de obra:


Contiene una lista de las unidades de obra o partidas de proyecto, que es la
información central en la Unidad de imputación, para facilitar al comienzo la
asociación de partidas a unidades, tenemos el botón Unidades de obra sin unidad de
imputación... que selecciona de entre todas las del archivo, las que cumplen esa
condición, poniéndolas en la lista y por lo tanto podemos asociar a cada una de las
Unidades de imputación que restan.

Menú Concepto / 145


Propiedades de Centro de producción (CEP)

Conceptualmente son como las Unidades de imputación: fábricas de algo construido, la


única diferencia es que no relacionan materiales comprados y registrados en
Albaranes, ni ofrecen como salida unidades de obra (partidas o elementos), SINO que
'fabrican' materiales auxiliares que producimos en obra (como hormigón u otros
recursos materiales de los que controlamos su descomposición).

En pestañas y campos es totalmente análoga a las propiedades de Unidades de


imputación, excepto que la pestaña de relaciones se llama Unidades auxiliares, el
botón que ayuda a seleccionar las que no están asociadas, se llama Unidades auxiliares
sin centro de producción, y por último, que las unidades construidas pueden formar
parte de los recursos asignados a la construcción de una partida en una Unidad de
imputación.

Ventana Propiedades: Recurso

Cuando el concepto actualmente seleccionado es del tipo Recurso, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Recurso, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el rótulo <tipo> · <clase>

Ventanas del programa / 146


La ventana no cambia demasiado ni de aspecto, ni de funcionalidad según la Clase:

Propiedades de M ano de obra (Especialidad)

Representa los recursos de horas de mano de obra de cualquier especialidad, utilizados


en las construcción de partidas de obra.

Pestaña Recurso:
Se muestran 3 clasificaciones que nos permiten situar el recurso por diferentes
grupos de utilización: Naturaleza (organización dentro de la ejecución de obra para
totalizar los informes de recursos), Familia (por grupos de recursos según la Entidad
proveedora, las entidades pueden estar asociados a varias familias), y Código de
compra (para temas contables, nos permite realizar una exportación de datos para el
programa de contabilidad y gestión Sigrid, de esta forma podemos llevar recursos
relacionados en múltiples obras de la empresa).

Recuerde que estos campos con una marca amarilla, contendrán rótulos Clasificados,
como la Unidad de medida.

A continuación, los campos habituales en las ventanas de propiedades:

Clase de recurso: Establece cuál de ellas se asocia al concepto actual. Cuando se


abre un concepto de Tipo Recurso genérico (sin ninguna Clase en especial), la lista
desplegable tiene seleccionada la opción en blanco, pero si seleccionamos una de las
opciones, el aspecto de la ventana puede cambiar, ocultando o mostrando pestañas y
campos particulares de la Clase elegida. Precio, Código, Resumen y Descripción, son
datos comunes también.

Pestaña Personas:
Lista de conceptos de Tipo Persona individual que están asociados a la especialidad
actual. la asociación se realiza en la propia ventana de propiedades de las Personas, y
por eso el color del nombre de la pestaña es verde . Aunque desde la esta lista, se
pueden modificar los datos e incluso insertar y eliminar relaciones.

Menú Concepto / 147


Pestaña Descomposiciones:
Es una lista como la de la siguiente pestaña, que sólo es informativa: no tiene
campos de edición para modificar columnas, pero SÍ se pueden eliminar líneas. Aquí
aparece el desglose de la aparición del recurso en el presupuesto de obra, con la
Cantidad, Precio e Importe con los que interviene en cada partida o capítulo.

Pestaña Documentos:
Una lista (igual que la anterior no modificable), con las líneas de los documentos
donde aparece el recurso, para todas las Fases de la obra (no sólo la actual). La
ventaja de tener los datos de cada línea es que tenemos el Precio, Cantidad, Importe,
Descripción... incluso si aparece más de una vez en alguno de los documentos, y no
sólo el total por documento.

Pestaña Disponibilidad:
Es un calendario mensual, que podemos desplazar con las dos flechas a los lados del
rótulo del mes: (Anterior y Siguiente). Los días del calendario se muestran con los
festivos considerados en el calendario global (aplicable a todos los turnos) al que
podemos acceder desde la pestaña Festivos de cualquier Turno.

Ventanas del programa / 148


Junto al número del día, aparece la disponibilidad de la especialidad en horas. Esta
cantidad se calcula como todas las horas disponibles un día para todas las Personas
relacionadas con el recurso actual.

Pestaña Valoración:
Es una pestaña con datos calculados y además común a todas las Fases del proyecto,
no contextual a la Fase actual. Muestra uno de los datos más interesantes del
seguimiento de obra: los precios medios reales calculados hasta el momento con las
compras y consumos registrados. La cantidad para el cálculo, es la Total (bien a
origen o parcial, según el conmutador exclusivo que esté pulsado), y el precio medio
puede provenir de Albaranes (lo más habitual) o de Facturas, también según el
conmutador que elijamos.

Nos permite asignar a los precios de la fase


actual, los precios medios calculados con la selección de conmutadores actual, para
poder aproximar cada vez más la previsión al precio real.

Sólo considera para este cálculo en último precio


en vez de la media ponderada. Los cambios se producen sobre la Fase actual.

Menú Concepto / 149


Propiedades de M aquinaria

Representa las horas de maquinaria empleadas en la obra, y utilizaremos este concepto


tanto para las presupuestadas, como para las controladas en obra (en general,
maquinaria propia, no subcontratada).

Todos los campos y pestañas son como los de la Clase anterior: Mano de obra, excepto
que la pestaña de recursos particulares no son personas sino:

Pestaña Equipos:
Esta pestaña está destinada a relacionar una lista de Equipos particulares al
concepto de Maquinaria actual a la que corresponde. Es el vínculo entre los equipos
reales individuales y concretos que se utilizan en la obra, y la maquinaria en general
presupuestada en la misma. La operación normal de asociación se realiza desde los
propios Equipos, pero también se puede modificar desde aquí.

Propiedades de M aterial

Representa todos los recursos materiales de construcción MÁS SIMPLES (los materiales
auxiliares de los que controlaremos también su descomposición, tendrán otro Tipo y
Clase de concepto).

Todos los campos y pestañas son como los de la Clase Mano de obra, excepto en la
pestaña Recurso, en la que aparece en primer lugar una lista desplegable Subclase del
material, que muestra una clasificación cerrada estándar de FIEBDC para clases de
materiales. Puede ser muy útil asignar la Subclase, para poder aplicar luego revisiones
de precios con los índices oficiales, por ejemplo.

Ventanas del programa / 150


La otra diferencia es que no hay pestaña Personas, ni Equipos, y por la tanto, tampoco
la de Disponibilidad, para relacionar con recursos reales de obra, porque los materiales
no tiene nombre propios ni los controlamos de esa forma. El único control que nos
interesa son cantidades recibidas y consumidas, el precio de compra o precios medios, y
en todo caso, en qué lugar físico se encuentra (si queremos controlar múltiples
almacenes).

Propiedades de M edio auxiliar

Los datos que podemos rellenar son los genéricos en todas las ventanas de propiedades,
ya que en este caso ni siquiera se permite especificar una unidad de medida asociada,
porque estos conceptos son un importe adimensional, en función de una cantidad
relativa a los demás conceptos de la descomposición (concretamente los que tiene por
encima de él en la lista).

El precio, por tanto de este tipo de conceptos, no se puede especificar manualmente,


sino que viene calculado por el resto de conceptos a su propio nivel.

Propiedades de Subcontrata

Representa los elementos más simples de una descomposición de obra, que se refieren
a recursos no controlados en nuestra obra, sino subcontratados externamente y que son
una partida alzada con un importe: No nos importará cuantas horas de mano de obra o
materiales va a requerir, sino cuánto nos va a costar subcontratarla.

Todos los campos y pestañas son como los de un concepto de Tipo Recurso genérico, o
Material, exceptuando que no tiene el campo Subclase del material en la pestaña
Recurso porque la subclase sólo es aplicable a recursos de obra de clase Material.

Ventana Propiedades: Contrato

Cuando el concepto actualmente seleccionado es del tipo Contrato, al abrir la ventana


de propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Contrato, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el icono de <tipo> · <clase> y los datos que aparecen en las diferentes
pestañas son similares, adaptados a las necesidades de cada Clase.

Propiedades de Contrato de compra de recursos

Permite almacenar los datos necesarios para calcular incrementos de costes por
contrata, revisiones de precios, coeficientes especiales de contrato... y toda la
información de contrata que nos sirve para determinar cantidades contratadas y
pendientes y clasificar todos los documentos emitidos y pendientes por contrato.

Pestaña Contrato:
Puede ver los campos comunes a las ventanas de propiedades y los valores que
pueden ir en cada campo en el tema Controles habituales. A los habituales Clase de

Menú Concepto / 151


concepto, Código, Resumen y Descripción, se añaden: una referencia a un concepto
Entidad, que representa al Proveedor cuando el contrato ha sido adjudicado (este dato
no es obligatorio en el contrato), y un campo Fecha de contrato.

Además, hay dos conmutadores que modifican el comportamiento de los documentos


asociados al contrato a la hora de imprimirlos: Documentos sólo con recursos
contratados, y Documentos impresos a origen, que respectivamente, fuerzan que
salgan sólo los recursos contratados en el documento y que las cantidades en
cualquiera de ellos sean a origen de fechas, en vez de sólo del documento en
cuestión.

Existen además dos campos donde podemos introducir coeficientes. El contenido de


estos campos es similar en todo a la pestaña de coeficientes de la ventana
parámetros generales y sólo se diferencian en el ámbito que abarcan: La de
Parámetros generales especifica valores para todo el archivo (por ejemplo si no
necesitamos utilizar contratos), y los coeficientes introducidos aquí sólo afecta a los
Recursos asociados al contrato.

Pestaña Recursos:
Cuando se especifica un Precio para los recursos en la columna correspondiente, el
precio queda bloqueado para los documentos que hacen referencia a este contrato, y
no pueden ser diferentes en los Documentos. Esto SÓLO es válido para Pedidos,
Albaranes y Facturas.

La lista está destinada a contener todos los recursos (de cualquiera de las Clases)
que asociemos al contrato. Además de los datos más importantes (Cantidad y Precio),
podemos almacenar Descripción (un comentario por línea), Plazo de entrega (en días),
Descuento, Precio Neto, y Precio del recurso (P.Recurso) en el proyecto.

Ventanas del programa / 152


La lista de selección que se muestra con una máscara en el campo Recurso, incluye
cualquier Clase de Recurso (Materiales, Subcontratas, Maquinaria y Especialidad
(genéricos de proyecto, no personas o equipos concretos). La asociación no se realiza
desde el lado de los recursos mediante ninguna referencia, solamente desde esta
lista.

IM PORTANTE: Recuerde que haciendo doble clic sobre las líneas de conceptos de las
ventanas de propiedades, tenemos un atajo para abrir la ventana de propiedades de
los conceptos relacionados y ver los datos de cada uno.

Lleva a la ventana principal la lista de recursos que


todavía no están asignados a un contrato. Esta selección y las siguientes son ayudas
interesantes para terminar de asociar recursos a contratos añadidos con
posterioridad.

Muestra en ventana principal, los que ya están


relacionados en más de un contrato.

Lleva a la ventana principal la búsqueda de recursos


que no están utilizados en la estructura de obra, por si fuesen pendientes de
considerar, pero todavía no estuviesen utilizados.

Los tres botones siguientes están activos en modo Edición porque no son para hacer
búsquedas de conceptos, sino para modificar datos del contrato o el proyecto:

Recalcula las cantidades que no están contratadas,


para los recursos que tenemos actualmente seleccionados en la pestaña. Cuando
cambiamos datos de los recursos que ya han sido asignados, debemos recalcular.

Permite asignar a los recursos contratados en el


contrato actual los precios previstos en obra.

Menú Concepto / 153


Asigna en la estructura de proyecto los precios que
hemos convenido en esta pestaña del contrato.

Pestaña Documentos:
Contiene una lista ordenada por fechas (primero la más reciente) de todas las Clases
de documentos relacionados con el contrato.

Permite en cada subpestaña, dar de alta nuevos conceptos de cada


Clase, asociados ya en un solo paso, a la entidad actual. La relación de vinculación a
través de esta lista, es igual que la que se mantiene desde el campo Entidad de la
ventana propiedades de uno de los Documentos.

Pestaña Pendiente:
Pestaña de datos calculados que reúne la lista de recursos relacionados al contrato
actual y ofrece el cálculo total o pendiente (depende del modo del conmutado M.
Pendiente) en todos los Documentos Pedidos, Albaranes y Facturas. Cada vez que
entramos en la pestaña se recalculan los datos.

, y Sirven para
elaborar de forma semi-automática esos documentos, en función de las cantidades
pendientes, para el contrato actual. Los pedidos sugieren los recursos y cantidades
que todavía quedan pendientes en los Pedidos realizados hasta la fecha, los Albaranes
con las cantidades pedidos y no recibidas, y las Facturas con las cantidades no
facturadas y recibidas en Albaranes.

Ventanas del programa / 154


Ventana Propiedades: Documento

Cuando el concepto actualmente seleccionado es del tipo Documento, al abrir la


ventana de propiedades del conceptos de cualquiera de las formas posibles (mediante la
opción Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades
Documento, o haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta
ventana.

Como todas las ventanas de propiedades de Tipos con varias Clases, en la barra de título
se muestra el rótulo <tipo> · <clase> y los datos que aparecen son casi en todas los
mismos, pero adaptados a las necesidades de cada Clase, por ello se explican en detalle
al comienzo y en cada Clase se van explicando las diferencias.

Propiedades de Documento (sin clase)

Vea los campos comunes a las ventanas de propiedades y los valores que pueden ir en
cada campo en el tema Controles habituales.

Pestaña Documento:
Los campos particulares son Fecha, y una relación con un concepto Clase Contrato
de compra. El primero caracteriza al documento, y el segundo se pone cuando la
solicitud va contra un contrato conocido, pero no es obligatorio, ya que se puede hacer
peticiones de oferta sin dirigirlas a un contrato.

En documentos, tenemos 3 pestañas con campos para textos extensos: Descripción


(que se corresponde como en todas las ventanas de propiedades, con la ventana Texto
), Observaciones e Incidencias, para una clasificación de textos más completa de lo
habitual.

Pestaña Líneas de detalle:


Muestra la Unidad, Precio, Cantidad e Importe (calculado), además de un campo para
una Descripción personalizada, de la relación de materiales -en el campo Recurso-,
que componen las líneas de desglose del documento. Los gastos anejos (por ejemplo
en las facturas portes, rapidez, descuentos globales, etc.) se establecerán como un
componente más.

Menú Concepto / 155


También hay campos que indican la Cantidad contratada (C.Contratada) si hay
contrato asignado, comparando con la cantidad de aquel, y se puede especificar la
cantidad a origen (C.Origen) contabilizando las ofertas por fechas del mismo contrato.
Se puede especificar un Plazo para cada recursos de la solicitud, y aplicar un
Descuento por línea de detalle (con lo que el campo Precio no será el que se
multiplique por la Cantidad para obtener el Importe por línea, sino que se utilizará el
Neto, que es el Precio una vez aplicado el Descuento.

Descripción alternativa
Sólo es un texto extenso más, sin limite de longitud, para guardar otros comentarios
por cada una de las líneas de detalle; se corresponde con el campo Descripción de
cada línea.

Referencias a documentos
Es un índice para cada una de las líneas de recursos del panel superior, de todos los
documentos donde aparece es una información cruzada. Es muy útil para abrir
todos los documentos relacionados.

Propiedades de Solicitud de oferta

Pestaña Líneas de detalle:


Es igual que en los documentos generales sin clase, excepto que tiene el botón:

Que permite crear un documento de esa clase (de forma


parecida a como se puede hacer en la pestaña siguiente) con las líneas
seleccionadas, pero sin asignar ningún Proveedor.

Pestaña Proveedores:
Lista de entidades que queremos relacionar con la petición de oferta. La columna
Familias de recursos nos muestra la clasificación múltiple que tiene asociada cada
una de las entidades. Puede servir como comprobación de la petición de oferta está
bien dirigida.

Es una herramienta para montar


directamente un Documento de clase Oferta para tomar los datos de una oferta
recibida de uno de los proveedores de la lista. Los recursos incluidos en la oferta
recibida serán los que hayamos seleccionado primero en la pestaña Líneas de detalle
, y la entidad, la seleccionada en esta pestaña.

Ventanas del programa / 156


Pero la lista de entidades de esta pestaña tiene otra utilidad más potente aún: la
exportación de la oferta a los proveedores seleccionados mediante un archivo HTML
con un formulario para que la devuelvan valorada (se puede enviar por e-mail, en un
disquete...).

Esto se hace pulsando el procedimiento Exporta web. Petición de oferta de contrato


que hay en el submenú Herramientas > Exporta, o también, pulsando Preliminar en
el diálogo de informes y procedimientos que se muestra con el botón Imprime de esta
ventana. En este segundo caso, se toman los datos del documento Solicitud actual, y
en primero, se consideran todas las entidades de todas las Solicitudes de la base de
datos.

En ambos casos, se muestra un diálogo que nos permite enviar la Solicitud de oferta
en una página HTML: E-mail la manda directamente por correo electrónico (cada
entidad proveedor debe tener entre sus datos una dirección de e-mail); Archivo
solamente genera el archivo HTML, y lo abre con el navegador de Internet
predeterminado en Windows, para enviarlo a través de otro medio. Con Siguiente
podemos saltar la generación del archivo para el proveedor que se muestra en el
diálogo pasando al siguiente, y Cancela termina el proceso de generación de archivos
si tenemos varios.

Propiedades de Oferta recibida

En la pestaña Documento, además de los mismos campos que la Clase genérica, tiene
una relación Proveedor con un concepto de tipo Entidad, que se utiliza cuando recibimos
la oferta, para identificar el remitente.

En Líneas de detalle, el botón de generar documentos cambia y tenemos:


(siguiente paso a la solicitud de oferta, si esta es aceptada) y
(el paso anterior en caso de que para el siguiente pedido,
esté vigente otra oferta).

Menú Concepto / 157


Propiedades de Pedido emitido

En Líneas de detalle, los botones de generar documentos cambian, y tenemos:


(siguiente paso al pedido) y (el
paso anterior en caso de que para el siguiente pedido, esté vigente otra oferta).

Propiedades de Albarán recibido

En Líneas de detalle, los botones de generar documentos cambian, y tenemos:


(siguiente paso al pedido) y (el
paso anterior en caso de que para el siguiente albarán, haya otro pedido).

Propiedades de Factura recibida

En Líneas de detalle, los botones de generar documentos cambian, y sólo tenemos:


para el caso de tener que complementar albaran/es
anteriores a la factura, con otro más.

Propiedades de M ovimiento entre centros de coste

En la pestaña Documento, aparece el campo Fecha y el Centro de coste origen al que se


refiere el movimiento de recursos. Puede haber diversos destinos, en cada una de las
líneas de detalle, pero para cada movimiento un sólo origen. Se trata de un documento
de distribución de recursos.

Propiedades de Parte de trabajo

En la pestaña Documento, la particularidad, en referencia con la de la Clase


Movimientos entre centros, es que este documento representa el movimiento inverso:
En cada línea de detalle puede tener diversos orígenes, que se concentran en la
producción de un único Centro de coste destino.

Este documento almacena y muestra los datos reales DESPUÉS de la ejecución de los
trabajos. Para ello introducimos las cantidades REALMENTE utilizadas en la ejecución,
tanto de Recursos (materiales y humanos), como de Equipos y Personas concretas, y
también Unidades auxiliares como materiales aunque tengan descomposición.
Habitualmente, puede mostrarse sólo la columna Persona, Equipo o recurso, ya que es
la más detallada, pero hay otra, Recurso, que se debe establecer cuando se trata de una
Persona o Equipo, para que quede constancia del recurso a que se hace referencia en

Ventanas del programa / 158


cada caso.

Si llevamos también control de tiempos mediante Tareas, podemos comparar en


cualquier momento fechas y cantidades de los partes, con las de la pestaña Consumos
previstos de las Tareas.

Centro de coste origen: Se aplicará tanto si la línea corresponde a un Material (será un


Almacén), como si se trata de una Unidad de imputación de referencia o un Centro de
producción. El control del Centro de coste origen no es obligatorio.

Extra: Nos permite separar en recursos horarios, horas que se computan a un precio
especial, de esa forma también podemos tratarlas de distinta forma.

Ventana Propiedades: Banco

Cuando el concepto actualmente seleccionado es del tipo Banco, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Bancos, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Con los conceptos de este tipo almacenamos los datos relativos a una cuenta bancaria,
no a un banco en realidad.

Pestaña Banco:
Además del Código de cuenta, completo con 2o dígitos del que se calculan
automáticamente los dígitos de control, y una descripción clasificada de la Entidad
bancaria, nos encontramos con las dos subpestañas habituales Descripción y
Concepto, que tienen los campos comunes a todas las propiedades vistos en
Controles habituales.

Menú Concepto / 159


Pestaña Líneas de detalle:
Consiste en toda la lista de anotaciones y movimientos de la cuenta bancaria. Para
filtrar por fechas, tenemos los selectores del lado derecho de la primera sección, de
los cuales siempre se toma por defecto Mensual. Los otros conmutadores son
excluyentes y permiten seleccionar un ámbito de Anual o Diario y Todo para no
filtrar temporalmente.

El el lado izquierdo de la misma sección tenemos 4 flechas para desplazarnos al


Siguiente / Anterior, Principio / Final del periodo que tengamos seleccionado, y a su
derecha se rotula el momento actual.

Las líneas tienen todos los campos típicos de una anotación bancaria (incluyendo dos
Fechas, la de ordenación y la de abono o cobro efectivo). El campo Concepto banco es
clasificado, como Clasificación, para poder mantener las referencias a los conceptos
que use el propio banco, si se desea. Si no se desean conceptos bancarios
clasificados, podemos poner un texto libre en Comentarios.

Documento: Es una referencia a un concepto de tipo Documento que pueda estar


relacionado (factura, albarán...).

Importe: Como el de Saldo, muestran color rojo automáticamente cuando son


negativos.

Ventanas del programa / 160


Ventana Propiedades: Persona

Cuando el concepto actualmente seleccionado es del tipo Persona, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Personas, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Pestaña Persona:
Vea los campos comunes a las ventanas de propiedades y los valores que pueden ir
en cada campo en el tema Controles habituales.

Incluye campos para características generales y datos propios de una persona


particular de la obra. En el campo Localidad, nos encontramos con la peculiaridad de
que al rellenarlo también lo hará automáticamente el campo Provincia, con la
correspondiente.

Además nos encontramos otros campos de datos sencillos y uno que nos relaciona
este concepto con la Especialidad a la que corresponde. Este es el vínculo entre las
personas reales y concretas que trabajan en la obra, y las categorías profesionales de
Especialidad proyectadas en la misma.

Pestaña Turnos:
Muestra y permite la asociación de conceptos de tipo Turno a la persona en cuestión,
puede tener varios para soportar distintos horarios en periodos de temporada alta,
vacaciones, etc.

Menú Concepto / 161


Pestaña Partes de trabajo:
Al igual que en la pestaña anterior, nos encontramos con una lista que nos permitirá
gestionar la asociación de los conceptos de Tipo Tarea a las personas. Será la lista de
partes de obra del trabajo realizado asociados a esa persona. La Fecha es un campo
informativo. Cantidad será el campo que nos muestre el número de horas normales
registradas en ese parte. El campo Extra permite guardar las horas extra separadas
de las normales de parte, para poder realizar distintos cálculos contables,
acumularlas por separado, etc.

Pestaña Disponibilidad:
Es un calendario mensual, que podemos desplazar con las dos flechas a los lados del
rótulo del mes: (Anterior y Siguiente). Los días del calendario se muestran con los
festivos considerados en el calendario global (aplicable a todos los turnos) al que
podemos acceder desde la pestaña Festivos de cualquier Turno.

Junto al número del día, aparece la disponibilidad de la persona en horas.

Ventana Propiedades: Equipo

Cuando el concepto actualmente seleccionado es del tipo Equipo, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Equipos, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Pestaña Equipo:
Vea los campos comunes a las ventanas de propiedades y los valores que pueden ir
en cada campo en el tema Controles habituales.

Ventanas del programa / 162


Incluye campos que caracterizan a un equipo o Maquinaria particular utilizado en la
obra. Hay varios campos de Clasificaciones y otros libres para Modelo y Nº de serie. El
primero, Maquinaria, tiene la referencia al concepto genérico de tipo maquinaria
que se utiliza en el presupuesto. La relación entre ambos se puede crear o cambiar
tanto en este campo como en la lista de equipos que muestran las propiedades de un
concepto Maquinaria, teniendo en cuenta siempre que una Maquinaria genérica
puede tener varios Equipos reales en obra, pero un Equipo sólo pertenece a un tipo de
Maquinaria.

Pestaña Turnos:
Muestra y permite la asociación de conceptos de tipo Turno al Equipo en cuestión,
puede tener varios para soportar distintos horarios en periodos de temporada alta,
vacaciones, etc.

Pestaña Partes de trabajo:


Al igual que en la pestaña anterior, nos encontramos con una lista que nos permitirá
gestionar la asociación de los conceptos de Tipo Tarea a las personas. Será la lista de
partes de trabajo que tiene asignado el Equipo concreto. La Fecha es un campo
informativo. El campo Extra permite guardar las horas extra separadas de las
normales de parte, para poder realizar distintos cálculos contables, acumularlas por
separado, etc.

Menú Concepto / 163


Pestaña Disponibilidad:
Es un calendario mensual, que podemos desplazar con las dos flechas a los lados del
rótulo del mes: (Anterior y Siguiente). Los días del calendario se muestran con los
festivos considerados en el calendario global (aplicable a todos los turnos) al que
podemos acceder desde la pestaña Festivos de cualquier Turno.

Junto al número del día, aparece la disponibilidad del equipo en horas.

Ventana Propiedades: Turno

Cuando el concepto actualmente seleccionado es del tipo Turno, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Turnos, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

Con los conceptos de este tipo almacenamos los datos de calendarios y horarios de
trabajo particulares para cada persona o máquina no subcontratada (propia). Este
concepto está íntimamente relacionado con los de tipo Persona y Equipo, que son los que
estarán sujeto a dichos turnos.

Pestaña Turno:
Nos encontramos sólo con los campos habituales de todos los conceptos. Vea los
campos comunes en el tema Controles habituales.

Pestaña Horario:
Se trata del horario que pertenece a ese Turno. Nos encontramos con ocho filas y dos
columnas. En las filas, tenemos los días de la semana más un día especial donde
englobamos a todos los festivos. En la primera columna se pone el número de horas
de trabajo por día (con décimas de día, no minutos). En la segunda la descripción del
horario en el siguiente formato:

hora:minutos-hora:minutos[;hora:minutos-hora:minutos]. Sólo es obligatorio rellenar


la segunda columna, ya que la aplicación calculará y completará la primera.

Ventanas del programa / 164


Pestaña Personas:
Por el color del rótulo de la pestaña, vemos que se trata de referencias a datos que se
encuentran en otros conceptos.

Muestra la lista de las Personas concretas que están asociadas a este turno de
trabajo. En la columna Comentario se pueden incluir notas como temporalidad,
cambios, etc. Por supuesto, también se nos permite desasociar Personas (eliminando
las líneas) y asociar nuevas personas.

Pestaña Equipos:
Muestra la lista de Equipos o maquinaria concreta que están asociados a este turno
de trabajo.

Pestaña Festivos:
Por el color del rótulo de la pestaña, vemos que se trata de datos globales a todo el
archivo, es decir que todos los Turnos comparten. Se trata de una lista para
almacenar el campo Fecha del festivo y otra para un Comentario descriptivo de qué
festividad se trata. Se pueden introducirse tantas como se desee, pero se aplicarán a
TODOS los Turnos, y la fecha incluye el año, por lo que para cada año se deben
repetir una serie de fiestas (no se tiene en cuenta sólo el día y mes, como por
ejemplo el 1 de Enero). Esto se hace así para contemplar sin complicaciones las
fiestas móviles.

Menú Concepto / 165


Ventana Propiedades: Tarea

Cuando el concepto actualmente seleccionado es del tipo Tarea, al abrir la ventana de


propiedades del conceptos de cualquiera de las formas posibles (mediante la opción
Concepto > Ventana Propiedades o la de Concepto > Propiedades > Propiedades Tarea, o
haciendo doble clic con el ratón sobre el icono de Tipo), se muestra esta ventana.

La Tarea es el centro del control de tiempos, para Menfis Control. Consiste


básicamente, en una asociación de cantidades de recursos consumidas (al ejecutar una
partida de obra), con cada una de las actividades del proyecto.

Vea los campos comunes a las ventanas de propiedades y los valores que pueden ir en
cada campo en el tema Controles habituales.

Pestaña Tarea:
En esta pestaña comienzan los datos que definen una tarea u orden de trabajo: Fecha
inicial y Final que definen el periodo de trabajo, este es el periodo que se reflejará en
el Cuadrante temporal, para cada una de las Tareas.

La relación de cada Tarea con la partida de obra a la que pertenece, no se hace

Ventanas del programa / 166


referenciando simplemente en el campo Actividad una unidad de obra (que puede
intervenir en varios capítulos de un proyecto) sino una ÚNICA relación capítulo-
partida. Para hacer una selección de este tipo, si ponemos una máscara de un código
en el campo, se nos mostrará el diálogo Selección de concepto, pero si seleccionamos
una unidad de obra que está debajo de más de un capítulo, aparece un segundo
diálogo para elegir el capítulo. El rótulo resultante aparece de la forma:

<cód_capítulo> ·· <ód_unidad_obra> · <resumen_unidad_obra>

En caso de utilizar la visualización Descripción en la ventana de Opciones, se


mostrará:

<cód_capítulo> ·· <resumen_unidad_obra>

% Peso de los recursos: Por defecto es 100 (la totalidad de los recursos de la unidad
corresponden a la ejecución de la tarea), pero se puede especificar cualquier
porcentaje.

Permite relacionar la Tarea actual a la unidad


de obra seleccionada en ventana principal.

Pestaña Precedencias:
Permite mantener las relaciones entre Tareas, tal como se ven y utilizan en la
ventana Planifica tareas. Podemos relacionar pares de ellas para establecer
condiciones de precedencias. En el primer panel se puede poner una lista de Tareas
que siguen a la actual, y en el segundo, las precedentes a la actual. La relación se
puede establecer en las listas desplegables Precedencia de cada panel, y pueden ser:
Final-Principio; Final-Final; Principio-Principio; Principio-Final.

También se admite en cada relación un Desplazamiento en días (que es la unidad


temporal que consideramos en las Tareas).

Pestaña De la misma actividad:


Lista de todas las Tareas relacionadas con la misma RELACIÓN capítulo-unidad de
obra (actividad), y nos permite (como siempre mediante un doble clic en cada una de
ellas), acceder a cada una y consultar o modificar los datos.

Menú Concepto / 167


Fechas Inicial y Final: Son prácticamente obligatorias, porque si se deja una en
blanco, la ventana del cuadrante mostrará una barra que va desde el año 0000 hasta
la fecha de finalización o desde la de inicio hasta el año 9999.

% peso de los recursos: indica la cantidad (sobre 100, que es el valor que se sugiere
por defecto) que cada actividad de una misma partida va a tener sobre el total
previsto. La suma total de todos los pesos será siempre 100.

Sirve para hacer una división de las tareas que implica


una unidad de obra por dos motivos: porque cambie el curso temporal de la
realización o porque se requieran distintos recursos en distintos periodos de la
Tarea. Se nos muestra un diálogo, para personalizar la forma de división, admitiendo
el Número de divisiones, y el Número de días entre cada una de las divisiones (0 días
quiere decir, todas consecutivas).

El selector exclusivo de tipo de distribución, permite elegir cómo se distribuye la


cantidad de recursos utilizados entre las divisiones creadas:

Distribución Uniforme: es la más sencilla y divide a partes iguales las


cantidades, entre el número de partes; por ejemplo, al dividir una Tarea con un
recurso de Especialidad de cantidad 10,00 en 5 partes, obtendremos Tareas con
medición 2,00

Distribución Gauss: hace una división, aproximándose a la distribución


estadística Normal (campana de Gauss) que agrupa el mayor peso de la
medición en los valores centrales; por ejemplo, dividiendo la cantidad 10,00 de
un recurso en 10 Tareas, se obtienen las siguientes cantidades: 0 / 0,04 / 0,25
/ 0,79 / 3,91 / 3,91 / 0,79 / 0,25 / 0,04 / 0,02. Los pequeños redondeos
siempre se acumulan en la última división.

Distribución M anual: activa el campo inferior, y nos permite introducir el peso


(en proporción) que se va a dar a cada una de las divisiones. Cada número

Ventanas del programa / 168


introducido, separado por un espacio en blanco, indica las proporciones
relativas; por ejemplo, si introducimos 1 2 3 sobre nuestra Tarea con una
cantidad de 10,00, con 2 divisiones, las 2 divisiones obtenidas serán: 3,33 y
6,67.

El último peso (3) se descarta, ya que los valores dados en la lista eran más que
las divisiones pedidas. Además se obtendría las mismas si hubiésemos puesto 5
10, ya que la relación 1-2 es igual que 5-10 (el doble).

Pestaña De la misma unidad de obra:


Lista de todas las Tareas relacionadas con la misma unidad de obra, pero en este
caso como CONCEPTO, no como RELACIÓN capítulo-partida. Esto quiere decir que
incluye todas las Tareas que se ejecutan en distintos capítulos (si se da el caso de
que la misma partida intervenga en varios), aunque lo habitual es que esta lista y la
de De la misma actividad, sean iguales. Como es habitual en estas listas, se nos
permite mediante un doble clic, acceder a cada una y consultar o modificar los datos.

Pestaña Consumos previstos:


Incluye una lista de todos los recursos Materiales, Maquinaria y Especialidad
genérica, utilizados para realizar la Tarea. El campo Recurso, admite cualquiera de
los conceptos simples del archivo de proyecto (Especialidad, Maquinaria, Material y
partida alzada sin descomposición). Cualquier máscara de Código o de Resumen,
mostrará para seleccionar una lista de todos los simples filtrada con la máscara.

Cantidad: Se ofrece calculado a través de la acumulación recursiva de cualquier


medio material y humano que intervenga en la partida asociada a la Tarea.

Precio: Se sugiere a partir del precio de proyecto y no es editable para cada Tarea
particular, podemos modificarlo en el proyecto. De igual forma, no podemos editar el
campo Importe que se mantiene calculado automáticamente multiplicando Cantidad
por Precio.

Menú Concepto / 169


Menú Proyecto
Menú Proyecto
Este menú da acceso a ventanas con información referente al proyecto actualmente
cargado en ventana principal, considerando éste como el contenido global del archivo.
En el menú de su programa puede haber opciones que no se describan aquí por ser muy
especializadas: búsquelas en los temas particulares de la aplicación.

Ventana Informa...: Muestra momentáneamente un pequeño diálogo de progreso


mientras recorre la estructura de la base de datos, y abre una ventana con múltiples
estadísticas del contenido: número de elementos, tamaño, porcentaje de cada uno...

Ventana Parámetros generales...: Muestra varias pestañas con opciones que


afectan globalmente a decimales, coeficientes, datos de informes, numeración, etc.
Todos datos relativos SÓLO al archivo abierto actualmente, cada archivo tiene sus
parámetros generales.

Ventana M onedas...: Que permite gestionar los cambios y configuración de


decimales de diversas monedas, para todos los precios del archivo.

Ventana Informes y procedimientos...: Que permite imprimir en archivo, pantalla o


papel la información que deseemos de base de datos, mediante unos programas de
informes en lenguaje JavaScript.

Configuración global paramétrica...: Permite configurar paramétricos globales y


acceder a las librerías Javascript.

Ventana de Fases...: Permite gestionar y acceder cómodamente a los datos de las


múltiples fases o "imágenes" de la misma estructura de conceptos.

Ventana de Ámbitos...: Permite crear y gestionar diferentes ámbitos de precios


dentro una obra.

Ventana Planifica tareas...: Permite organizar y acceder rápidamente a las tareas


en las que se convierten las partidas de obra y actividades de proyecto. Es la

Menú P royecto / 171


planificación temporal completa del proyecto.

Ventana Ajusta presupuesto...: Que permite modificar el presupuesto total o por


tipos de conceptos, ajustando bien manualmente o bien en proporción de precios y
rendimientos.

Ventana Hoja final...: Da posibilidades de gestionar una pequeña "hoja de cálculo"


para impresión de resúmenes de informes personalizados. Esta hoja se imprime de
forma predeterminada desde algunos informes.

Las ventanas de búsqueda de información en el archivo:

Ventana de navegación en árbol...: Abre una ventana con el árbol del presupuesto
similar a la que podemos obtener desplazando la barra punteada que está a la
izquierda en la ventana principal. Está sincronizada con la ventana principal por lo
que podemos navegar por ella y ver los resultados en la ventana principal.

Búsqueda General...: Muestra opciones para facilitar la búsqueda de conceptos y


relaciones en la base de datos, por distintos criterios avanzados, mediante nombres
de campos y tablas de la base de datos.

Búsqueda por Términos...: Muestra un campo para poder introducir un clave o


máscara de códigos de términos y poder seleccionar los conceptos que coincidan con
él, cuando la base está indizada

Búsqueda en Lenguaje natural...: Muestra un diálogo para la introducción de una


frase en lenguaje natural y buscar mediante los descriptores del tesauro que se esté
utilizando

Estos 3 tipos de búsqueda se complementan con la búsqueda en árbol que permite el


panel izquierdo de la lista en la ventana principal.

A continuación, ventanas para la gestión y mantenimiento de las tablas de datos


básicas del programa:

Tipos de conceptos: Gestiona la tabla de tipos básicos de conceptos que pueden


existir en base de datos

Clasificaciones: Muestra una lista de definición de textos, que sirven para


subclasificar y añadir una característica más a los conceptos de tipo Varios.

Características: Define los iconos que se muestran en la ventana principal en la


columna Iconos, y que se asignan automáticamente en función de las condiciones
definidas en esta ventana.

Utilidades de proyecto: Muestra opciones relacionadas con la gestión de todo el


archivo de base de datos. Este submenú es totalmente dinámico y configurable por el
usuario, ya que la primera sección son herramientas fijas programadas dentro de la
aplicación, pero las demás opciones son programas en JavaScript (accesibles desde
la ventana informes y procedimientos) que se muestran aquí para una mayor
comodidad, pero se pueden ordenar, separa en otras secciones, añadir nuevas y
reprogramar, con el siguiente criterio:

Ventanas del programa / 172


Se toman los programas de la carpeta COLECCIONES ESPECIALES/MENÚS Y
CONTROLADORES/MENÚ HERRAMIENTAS DE PROYECTO/ y se colocan en orden por
el nombre de archivo, que tiene que ser de la forma "menpro<num>" la serie de
números <num>, determina el orden en que aparecen en el submenú y la división
en secciones se hace cada decena; por ejemplo: El programa menpro31.xjs "Elimina
descomposiciones", pertenece a la tercera serie del submenú y muestra un diálogo
de confirmación para realizar la eliminación.

Por ejemplo, la opción Autodocumentador de base de datos ~, se corresponde con el


programa JavaScript menpro10.xjs y muestra un informe (en pantalla o hacia
impresora) con un volcado de todas las tablas de la base (de gestión interna y de datos
normales), los nombres, tipos, índices y tamaños de campos, etc. útil para ampliar y
modificar la base de datos.

Utilidades de control: Sólo se muestra si se tiene el módulo de control de obras ©C,


y en ese caso igualmente, toma las opciones de los programas de informes menctl*.
xjs y su utilidad es tener más accesibles los procedimientos JavaScript más
habituales.

Ventana Información del proyecto


Accesible desde la opción Ventana Informa...; se muestra una lista de todos los
elementos y datos que componen la base de datos actual (así como su nombre y camino
completo). Si se personalizan los campos que se muestran (abriendo los que
normalmente no se ven, porque tienen datos más detallados), se pueden ver las
columnas:

Menú P royecto / 173


Tipo: Un icono que NO tiene que ver con los tipos de conceptos, etc. sino que representa
una única tabla de base de datos (las de relaciones llevan una "R", las auxiliares una
"A", las de propiedades un icono como el de Tipo...)

Código: Nombre interno de la tabla

Padre: Nombre de la tabla padre con la que se relaciona

Tabla: Descripción explicativa de cada tabla

Número: Número de registros de la tabla

Tamaño: Tamaño de cada elemento de la tabla

Total: Producto de los dos campos anteriores

%: Peso de cada parte de la base de datos en el volumen total de la misma.

La lista de elementos representa todas las tablas de la base de datos, tanto las de
usuario y las de datos de conceptos, como todas las tablas auxiliares y básicas de la
aplicación.

Los distintos componentes de una base de datos:

La tabla Concepto hace referencia a los códigos distintos que hay en el archivo,
normalmente todos ellos aparecen en la estructura de árbol del archivo, pero pueden
existir conceptos que no tienen padre, es decir, no forman parte de ninguna
descomposición y son conceptos aislados. Por el contrario: habrá conceptos que están
incluidos más de una vez en la estructura, pero esta cifra de número de conceptos sólo

Ventanas del programa / 174


se contabilizan una vez.

Relaciones concepto-concepto es otro de los grupos más voluminosos, ya que representa


todos las relaciones de red y jerárquicas entre los elementos de la tabla Conceptos.

Hay otros grupos menores para gestión interna, como: Tipos de conceptos, rótulos,
seguridad...

Todos los demás grupos que representan Relaciones concepto-<dato>, indican el


número y tamaño de esas asociaciones (textos, gráficos vinculados...)

Gráficos indica el número y volumen que ocupan los gráficos incrustados.

Ventana Parámetros generales


Accesible desde la opción Ventana Parámetros generales..., muestra en varias
pestañas, valores, y variables globales a todo el archivos actual. Es la información
sensible a cada base de datos, NO opciones de configuración del programa que no varían
con cada archivo. Para modificar los valores de esta ventana, el archivo debe estar en
Modo Exclusivo, además de en Edición.

Pestaña Proyecto:
Los campos Título y Descripción, son los correspondientes al Resumen y Texto del
concepto raíz del archivo (.), que se pueden ver y modificar desde los campos de la
ventana principal, pero se ponen aquí para una mayor facilidad de acceso.

Tipo de archivo: Podemos seleccionar de entre la lista clasificada, uno de los


especificados, o dejarlo en blanco si no nos importa clasificarlo. Para Seguimiento de
obras es necesario el tipo, y para comparar archivos o gestionar distintos tipos con la

Menú P royecto / 175


central de proyectos, puede ser útil. La clasificación se puede ampliar, pero conviene
mantener al menos los que ofrece el programa, porque se utilizan en informes,
procedimientos JavaScript, etc.

Archivo asociado 1 y Archivo asociado 2: Son referencias a otros archivos externos


y establecen una relación (de ahí la marca verde que tiene en el botón de la derecha)
para realizar informes comparativos, para tener una copia de datos, para relacionar
archivo de venta y de costes en el caso de control de costes, etc. El camino mostrado
es relativo al último directorio utilizado, como se hace habitualmente.

Entidad propiedad y Entidad cliente: Son relaciones a dos conceptos de tipo Entidad
-que para poder editar, por supuesto deben existir en la base-, que nos permiten
guardar nuestros propios datos como persona, empresa, organismo, etc. y los de uno
de los clientes (si utilizamos una gestión de documentos, como Facturas, muy
sencilla, con emisión para una sola Entidad).

Se aplica a cualquier concepto de la base que


tenga fecha, e impide que sea modificado con anterioridad a la misma. De esta forma
podemos proteger la modificación de datos en el periodo que deseemos desde la fecha
de inicio.

Permite escribir una contraseña que se


asignará al archivo. Si un archivo está protegido contra edición, aparecerá la palabra
"Edición" del conmutador de edición de la ventana principal en color rojo.

Tipo de archivo
En este apartado podemos seleccionar el tipo de archivo que vamos a crear. Su
función es similar a la elección del tipo de archivo del campo anteriormente
mencionado, solo que en este caso esta información se incluiría en el campo
correspondiente de un fichero en formato bc3 si este fuese generado.

Pestaña Decimales:
En primer lugar hay una lista desplegable que afecta al campo Precios de todos los
conceptos de la base: Moneda base que es la moneda en la que se suponen los Precios
e Importes que aparezcan en los conceptos y los que sean calculados. La lista
contiene todas las monedas contempladas en Menfis.

Ventanas del programa / 176


Muchos de los informes distribuidos ofrecen la posibilidad de imprimir en dos
monedas a la vez, cambiando un valor en un parámetro de informe. Por otro lado, si
ponemos como moneda actual DE VISUALIZACIÓN, otra moneda, Los informes
saldrán en la moneda que elijamos, sin cambiar los valores que están grabados en
base de datos.

Los campos de entrada que hay debajo, admiten valores numéricos para determinar
el número de decimales que se indica, tanto en precios, como en importes,
mediciones, etc.: Nos permiten modificar el número de decimales que queremos
visualizar en pantalla para cada grupo de valores.

IM PORTANTE: Para los cálculos siempre se opera con los decimales que sea
necesario, es decir, por poner menos decimales aquí, no se pierde precisión en los
cálculos.

Importes (capítulos), por defecto está definido como cero (el campo en blanco), porque

Menú P royecto / 177


para los precios en pesetas -la moneda base habitual hasta el año 2001- no hacen
falta decimales, ya que el redondeo cuando se hacen operaciones de precios por
cantidades, es cero. Cuando la moneda base sea el euro, debería estar en 2, igual que
aparece ahora en decimales de Precios (costes directos).

Los Costes (directos e indirectos), se muestran como importes, porque son precios
con descomposición, que tienen menos detalle. Les pueden afectar los costes
indirectos, si están definidos en la pestaña Coeficientes.

Los decimales de Cantidades (capítulo/capítulo) son -1 lo que indica que no tiene


límite y se presentarán en pantalla todos los que se tecleen (aunque cuanto más alto
sea el nivel en la estructura de conceptos, en general, menos decimales se utilizan).

Decimales de Rendimientos (no capítulo/no capítulo) son 3 por defecto, porque la


descomposición de un concepto en componentes más pequeños, en general implica
un mayor nivel de detalle. Por este motivo Mediciones (capítulo/no capítulo) suele ser
2, porque no requiere tanto detalle.

Por último, los de Dimensiones (mediciones desglosadas), son los utilizados en la


ventana Mediciones.

Como se indica en el comentario al pie de la pestaña, el número de decimales que se


puede poner en cualquiera de los campos es:

0 o un número positivo, redondea a ese núm. de decimales

-1 no redondea, es decir, mantiene en formato de coma flotante cualquier


cálculo o cifra

-2 redondea en último decimal de 5 en 5.

Para informes, a estos datos se accede en JavaScript, con las variables de formato de
campos.

Al modificar cualquiera de los campos, se muestra el diálogo:

porque si el archivo está en modo Calculado, la nueva representación puede implicar


unos segundos de recálculo.

En informes, el número de decimales que se asigna por defecto a la presentación de


un campo, viene determinado por estos campos, aunque luego en cada campo se
puede forzar el número de decimales para algún caso concreto.

Por último, el campo Cifras significativas en cantidades teóricas es muy útil cuando
se quieren redondear cantidades de distintas magnitudes (por ejemplo, en control de
costes, lo más útil es redondear las cantidades de materiales en Pedidos, de forma

Ventanas del programa / 178


que la cantidad propuesta mediante herramientas de Menfis, no sean 127,35 ladrillos
sino 130, por ejemplo). El redondeo funciona de forma que el número dado es el de
cifras significativas A CONSIDERAR para el redondeo (es decir, de izquierda a
derecha). Así, como ejemplos:

con 0 cifras (sin


con 1 cifra: con 2 cifras: con 5 cifras:
redondeo):

127,54 -> 127,54 127,54 -> 100 127,35 -> 127,35


127,54 -> 130
127,895 -> 127,895 127,895 -> 100 127,895 -> 127,90
127,895 -> 130
13.467 -> 13.467 13.467 -> 10.000 13.467 -> 13.467
13.467 -> 13.000
3.567.345 -> 3.567.345 -> 3.567.345 ->
3.567.345 -> 3.600.000
3.567.345 4.000.000 3.567.300

Numeración:
Ofrece las herramientas para crear numeración en partidas y capítulos, para todo el
archivo, y utilizarla en los informes, por ejemplo, de cuadros de precios. Los datos de
numeración se guardan en cada momento en base de datos, junto al Código y demás
datos. Tenga en cuenta que SÓLO se numeran capítulos y lo que cuelgue de ellos
inmediatamente (otros capítulos o bien partidas).

Código raíz de numeración: Es por defecto el concepto raíz del archivo, y especifica a
partir de qué nivel se comienza a numerar (incluyendo ese nivel para numerar como
cero "0").

Numeración de actividades
Es la más habitual y se refiere a códigos únicos que identifican cada actividad (
unidad de obra). Son códigos asociados a la suma de una relación y un concepto, y
por eso son únicos.

Numeración de unidades de obra


Son códigos con repetición, ya que están asociados a cada concepto, y se repiten
cada vez que aparece la misma partida bajo distintos capítulos.

En ambas secciones tenemos los campos Máscara (<prefijo>{#}<separador>{#}


<sufijo>), que permiten especificar el formato en el que se grabarán los códigos
(aunque luego podríamos manipularlos para imprimir). En cuanto aparezca un

Menú P royecto / 179


carácter distinto de la almohadilla "#" -que representa un único dígito-, se toman
como prefijo, separador o sufijo. Por ejemplo:

A##.# -> A01.1, A01.2 ...

##-## -> 01-01, 01-02 ...

Y Número máximo de niveles permite especificar la profundidad a la que llegará la


numeración si queremos limitarla. Se considera a partir del concepto raíz y no
quiere decir que se dejarán de numerar actividades o unidades, sino que el código no
se articula como descendiente, es decir:

Si tenemos un solo nivel de capítulos, la máscara ##.## y ponemos "1" en


profundidad máxima, las partidas se numerarán pero como 01, 02, 03, 04... no como
01.01, 01.02...

Numerar también conceptos sin cantidad: Hará que entren todos los conceptos tipo
capítulo de la estructura en la numeración, incluso aquellos que no tienen asociada
una medición (1) en la estructura de la obra.

Muestra el diálogo de confirmación:

Para calcular y grabar la numeración con los valores indicados. Tenga es cuenta que
esto sólo es una herramienta para automatizar la creación de la numeración, luego
podemos modificarla a nuestro antojo, ya que son datos de la base como otros
cualesquiera (eso sí, en el momento de volver a lanzar el proceso, se anularán todos
los cambios manuales que hayamos hecho).

Muestra el diálogo de confirmación:

Esta función renombra los códigos, sustituyendo los originales procedentes de la base
de precios de referencia por una numeración correlativa similar al número de
actividad.

Ventanas del programa / 180


Pestaña Coeficientes:
Son valores guardados en la base de datos, a los que los informes pueden acceder a
través de los nombres almacenados en la tabla de cabecera de la base da datos (el
informe "Datos generales y de cabecera" de la carpeta \COLECCIONES
ESPECIALES\EJEMPLOS, documenta todos los nombres de variables).

Esta pestaña, con sus subpestañas, se reproduce en cada concepto de Tipo Contrato,
solo que esta hace referencia a todo el archivo, y las otras a cada una de las partes de
obra contratadas.

Los campos que muestran el símbolo porcentaje "%" en el rótulo, se almacenan en


"tanto por ciento"; si para operar con ellos en informes, necesita que están en "tanto
por uno" como coeficientes, tendrá que operarlos.

% Costes indirectos: Se aplica a todos los Precios de los conceptos que están
directamente debajo de capítulos, como se ha visto en la pestaña Decimales.

El resto de campos de tipo % o coeficiente, se utilizan para programar los informes de


Menfis, sin intervenir directamente en los precios de los conceptos.

Seguimiento
Referencia de la obra: Se puede utilizar para almacenar la referencia de la obra que
nos da el cliente, la que queramos asignar nosotros o el centro de coste de Sigrid, al
que está asignado esta obra.

El contenido de este campo, puede aparecer en las cabeceras de los informes de


Menfis siempre que se haya activado desde los parámetros de éstos.

Campos con fechas de importancia para el archivo de control de costes, cuando


hacemos seguimiento de contratación, desde la petición de oferta hasta la
adjudicación de la obra.

Menú P royecto / 181


Revisión de precios
Incluye un coeficiente general para la Revisión de precios simples, una Fórmula
polinómica a aplicar, Fechas inicial y final de revisión (el periodo filtra por las
fechas de Fases) y como condiciones especiales: Dos límites: superior e inferior,
para descartar precios a revisar, y los dos conmutadores Con resta de límites e
Índices de Canarias, aplican esos modificadores especiales a los coeficientes de
revisión mediante índices oficiales o fórmulas polinómicas.

Costes
Incluye un conmutador que permite que la amortización de periodificables en
control de costes se realice sobre el avance del archivo de venta en vez del avance
sobre coste.

Pestaña Seguimiento:
Permite personalizar las marcas de seguimiento que vamos a usar en nuestro
proyecto, introduciendo descripciones a cada una de ellas para facilitar su
entendimiento.

Para localizar un conjunto de conceptos con una marca de seguimiento concreta,


utilizaremos la ventana de búsqueda general. Una vez en ella, iremos al apartado
Condiciones de búsqueda y, pichando sobre uno de los botones en blanco,
seleccionaremos la opción "rcc.mrc: Marca Seguimiento". En el desplegable de signos
dejamos el símbolo "=" e introducimos el número correspondiente al orden que ocupe
en la lista de marcas de seguimiento. Por ejemplo: el 1 corresponderá a la marca roja, el
2 a la azul y así sucesivamente. Pinchando sobre , se ejecuta la
búsqueda, mostrando los resultado en la ventana principal.

Si lo que queremos es localizar todos los conceptos que tienen algún tipo de marca de
seguimiento asignada, basta con hacer clic sobre el botón seguimiento de la sección
de búsquedas programadas de la ventana de búsqueda general.

Ventanas del programa / 182


Pestaña Informes:
Los campos Situación, Cabeceras... y Pies... almacenan los datos más habituales de
informes, en la posición en la que suelen imprimir las firmas de resúmenes,
certificaciones, etc. Las variables de JavaScript que se corresponden con estos
campos, están en la tabla CAB (cabecera de la base de datos). Podemos ver todos los
valores y campos almacenados en esta tabla con el informe \Colecciones
especiales\Ejemplos\Datos generales y de cabecera. Algunos de estos campos son:
situacion, firma[123]c, y firma[123]p

Variables genéricas (variable="valor";) es un campo de texto que permite la definición


de una porción de código JavaScript para utilizar en informes. Esta definición de
variables globales suelen ser ciertos porcentajes poco usuales, textos
personalizados..., incluso pueden servir para dar valores al realizar una importación.
Para utilizar las variables escritas en este campo de texto como definición de
variables, se debe evaluar el campo con: eval(bas.cab.informes);

Logotipo para informes es un botón que tiene dibujado el primer gráfico asociado al
concepto raíz (.) de la base de datos. Es el logotipo que se usa más frecuentemente
para imprimir como cabecera de informes. Pulsando en el recuadro con el botón
izquierdo del ratón, podemos elegir mediante un diálogo estándar, cualquier gráfico
con un tipo soportado por la aplicación. Si pulsamos con el botón derecho, se pueden
borrar todos los gráficos asociados al concepto raíz pulsando Si.

Pestaña Base de datos:


La pestaña permite teclear una macro o sentencia SQL, sirve para dar de alta
campos, y realizar operaciones externas con la base de datos. El botón Ejecuta
consulta SQL, manda al panel redimensionable inferior el resultado de la consulta
tecleada en el panel de edición. Esto es útil porque en la ventana principal sólo se
pueden hacer Select que devuelvan un identificador de las tablas CON o RCC, en
cambio aquí se admite cualquier sentencia SQL.

Menú P royecto / 183


Ejecuta la sentencia, permitiendo insertar,
borrar, actualizar tablas... por ejemplo, ejecutando las sentencias "DELETE * FROM
RCG" y "DELETE * FROM GRA" eliminamos todos los gráficos de la base de datos se
una forma rápida si tenemos miles de gráficos (aunque no recomendable en general,
por el peligro que supone manejar directamente las tablas).

En el campo Archivo alternativo del SGBD, podemos introducir un segundo archivo


que funciona como backup del archivo que gestiona la seguridad.

Permite abrir directamente desde Ms-Access las


tablas de la base de datos actual si están en formato .MDB; para ello hemos debido
poder abrir el archivo de base de datos de ese modo y exportar.

Botones al pie de todas las pestañas:

Restaura los valores originales que se tenían al instalar el programa,


antes de hacer cambios en la configuración de defecto.

Copia los datos que tenemos en las cinco pestañas, a la ventana


Parámetros generales de la ventana paralela

Sale de la ventana. Mientras no se entre otra vez en este diálogo a


modificar los parámetros, estos se mantendrán invariables para el mismo archivo.

Ventana Monedas
Accesible desde la opción Ventana M onedas...; sirve para mantener una tabla de
divisas, con los cambios de diversas monedas tanto de zona euro como de todo el mundo
(se incluye el cambio de unas 170). El tener varias monedas nos permite ver todos los
importes y presupuestos calculados en cada una de las monedas, e incluso imprimir

Ventanas del programa / 184


informes con esas cifras y nombres de divisa. La ventana tiene dos pestañas:

Pestaña Actual en monedas:


Muestra, como tantas otras, en el encabezado, el icono de Tipo, Código y Resumen, el
concepto actual de la ventana principal, ya que los importes que se muestran en la
columna Precio, en cada una de las monedas, se refiere a ese concepto. Es posible
ver las columnas Nº, Símbolo, Código y Moneda que tienen ese datos para cada una
de las monedas extranjeras.

Esta pestaña sólo sirve para consultar el importe de un concepto dado en cualquiera
de las monedas, y seleccionar temporalmente una moneda para ver todo el
presupuesto.

Pestaña Definición de monedas:


Sirve para definir los cambios monetarios y los decimales correspondientes a cada
moneda. Se pueden introducir en los campos de edición de las líneas
autonumeradas, el Símbolo (que no tiene porque ser único), Código (o abreviatura
estándar mundial bancario de 3 letras), el rótulo de la Moneda (su nombre), el factor
de Cambio con respecto al valor de la moneda tomada como base (en primer lugar de
la lista), y por último el número de decimales que se utilizan con esa moneda tanto
en Precios como en Importes.

La última columna de todas, Masculino, establece el género de la moneda


(masculino=1 o femenino=0) para poder determinar rótulos en letra que varían con el
género, como "setecientos" y "setecientas".

La información de esta ventana es independiente de la base de datos actual, se


define para el programa. La actualización de los cambios se puede realizar en la
propia ventana, y se guarda en el archivo externo \MACROS\CSV\MONEDAS.CSV
que está en ese formato de texto plano con campos delimitados por punto y coma (;),
es decir, también se puede editar por ejemplo con Ms-Excel.

El botón Selecciona..., al igual que el doble clic con el ratón sobre una de las líneas,
permite en cualquiera de las dos pestañas), seleccionar temporalmente como
moneda actual en la ventana principal, cualquiera de las monedas. Al poner el
archivo en modo Edición se perderá la selección, ya que sólo es visual.

Imprimir
Ventana Informes y procedimientos

Accesible desde la opción ventana informes y procedimientos..., permite seleccionar,


editar y gestionar pequeños programas en lenguaje JavaScript, que contienen o bien
definiciones de informes (para lanzar a pantalla o por impresora), o bien procedimientos
que realizan acciones como exportar, conectar a otros programas, actual contra al B.D.,
realizar búsquedas, y en general, cualquier función que admita el lenguaje y las
extensiones que la aplicación tiene implementadas.

Los informes y procedimientos normalmente actúan sobre el archivo actual, pero se

Menú P royecto / 185


puede operar con cualquier archivo externo, series de archivos de B.D., generar
archivos nuevos...

La lista que se muestra bajo la columna Descripción, puede mostrar archivos y


carpetas. Las carpetas sólo son organizativas y la estructura completa del árbol se
guarda en un sólo archivo. Las importantes son todas las demás líneas, que
representan cada una a un archivo de texto del subdirectorio \INFORMES. En la
columna Código de las líneas que son archivos, se muestra el nombre del archivo.

Este es el icono que muestran las carpetas organizativas SIEMPRE. Se pueden abrir
o cerrar de la forma habitual en las estructuras de árbol jerárquico y debajo pueden
contener archivos y carpetas a distintos niveles.

Este icono representa informes y procedimientos JavaScript a los que no se ha


asignado un icono especial, pero pueden mostrar muchos otros porque se pueden
personalizar con el botón Cambio de icono.

La edición en esta ventana, no depende del modo Edición de la base actual en la


ventana principal, ya que tanto la lista de programas como los propios programas son
archivos externos a la base de datos.

La lista nos permite seleccionar uno o varios programas mediante multiselección. El


doble clic sobre cualquiera de ellos, lanza una vista preliminar a pantalla igual que el
botón Preliminar. Si el programa es un procedimiento, se ejecutará con el resultado que
corresponda.

Cada línea de informe dispone de dos zonas sensibles que son atajos para el ratón:

La columna izquierda, en color gris, muestra con un doble clic de ratón, la


ventana de parámetros del informe —para lo cual también tenemos el botón
Parámetros—. Además sirve para mover informes de una carpeta a otra mediante
arrastrar y soltar con el ratón.

La columna Código, muestra mediante un doble clic, el programa del informe y


además está es la única manera de editar los programas desde la aplicación (como
son archivos de texto plano, también se podrían modificar y crear con cualquier

Ventanas del programa / 186


editor de texto.

Los dos campos que hay al pie de la lista (como hemos dicho siempre están en Edición),
sirven para modificar el rótulo de descripción de las carpetas y programas. También se
pueden convertir carpetas en programas de una forma indirecta: al crear una línea
nueva en la lista, se crea de tipo carpeta, pero si además definimos un nombre de
archivo, se convierte en un programa y se crea un archivo en blanco con ese nombre.

IM PORTANTE: Tenga en cuenta que en el archivo .INI de estado del programa se


guarda UN SOLO estado de índices y carpetas para las dos instancias del programa: la 1
y la 2. La última que se cierre con modificaciones será la que quede grabada para la
siguiente vez que se abra el programa.

Resumiendo, las operaciones que podemos realizar con la lista de archivos y carpetas
son:

1. Insertar líneas (como siempre, mediante la tecla INSERT en la posición de la


lista que deseemos, o desde los campos de edición, pulsando CONTROL+INSERT).

2. Eliminar líneas, seleccionando de una en una para mayor seguridad. Se pedirá


confirmación para cada una de las eliminaciones. También por seguridad, al
eliminar una carpeta (abierta o cerrada) NO se eliminan los archivos que
contiene.

3. Crear nuevas carpetas, insertando una línea y poniéndole un nombre en el


campo Descripción.

4. Crear nuevos archivos, poniendo nombre de archivo a una carpeta (para crearlo
en blanco) o desde la ventana de Edición de Programa.

5. Mover archivos o carpetas. Esta acción tiene varias peculiaridades:

Mediante arrastrar y soltar, en la columna gris de la izquierda de la lista, una


línea de programa o una carpeta abierta, se mueven sólo dichas líneas. Por
tanto, en el caso de mover una carpeta abierta, los informe que contuviera,
quedan dentro de la carpeta superior.

Si en una carpeta abierta, multi-seleccionamos la carpeta y su contenido, sí


podemos arrastrar todo a otro sitio; y si la carpeta está cerrada, también se
traslada todo su contenido.

6. Renombrar archivos o carpetas, simplemente cambiando el texto en los campos


de edición al pie de la lista: el nombre del programa y el nombre del archivo con
extensión .XJS

7. Lanzar la vista Preliminar de un informe, haciendo doble clic sobre la línea del
informe.

8. Cambiar la estructura de carpetas y agrupación de informes, mediante los


botones correspondientes.

Al intentar ejecutar un programa cualquiera, bien sea informe o procedimiento, se


puede mostrar uno de estos mensajes:

Menú P royecto / 187


IM PORTANTE : Hay que tener cuidado si va a renombrar archivos que se distribuyen
con el programa, porque algunos prefijos de nombres sirven para identificar grupos de
informes para utilizarlos contextualmente de distintas maneras (botones contextuales
de las ventanas de propiedades, pestañas de ventanas del programa, opciones de menú
de la ventana principal...). El funcionamiento de los nombres de archivo tiene las
siguientes peculiaridades:

Las 3 ó 6 primeras letras de cualquier nombre de archivo .XJS sirven para asociar
ese informe con los conceptos de ese Tipo, para que puedan ser utilizados desde
cualquiera de los botones Imprime que encontramos en las ventanas, por ejemplo en
la ventana principal o en las de Propiedades. Es decir, los que empiezan con "doc" se
asocian a la tabla DOC (Documentos), los que empiezan pro "con" se muestran con
todos los tipos de conceptos...

Si detrás de un nombre de tabla va un número 1 ó 2, se mostrará ese informe


contextualmente en el diálogo de Selección de informes según el criterio: 1-concepto
como padre, 2-concepto como hijo. Es decir, los que llevan el indicador 1 se usan para
datos de un concepto, y los que llevan 2 para informes referidos a listas o grupos de
conceptos.

Campos de edición

Debajo hay otra sección con diversos campos de entrada, que permiten hacer
modificaciones a la presentación de cada informe. Cada campo se explica en el tema de
programación de informes.

A la derecha de estos campos de edición hay dos nuevos botones. nos permite añadir
nuestros informes más usados a una lista accesible desde de la ventana
principal. Los informes ubicados en dicha lista son fácilmente reconocibles ya que van
acompañados de un icono identificativo situado en la columna descripción de la
ventana de informes y procedimientos. elimina el informe seleccionado de la lista
nombrada anteriormente.

Ventanas del programa / 188


Barra de botones
Abre un diálogo de progreso mientras calcula el informe y
mostrarlo en pantalla en la ventana Vista preliminar para visualizar la página tal y
como saldrá por impresora. Es equivalente a hacer doble clic con el ratón, sobre el
informe deseado (si es uno solo).

Mientras se calculan los informes se presenta un diálogo de progreso con el rótulo:

Permite detener el informe antes de la primera


página.

Calcula el informe y muestra el Diálogo informes por impresora


antes de lanzar la salida a la impresora que esté configurada en la ventana
configuración.

Genera el informe completo y lo guarda en formato estándar PDF


(Portable Document Format) de Adobe. Para poder generar informes en formato PDF
es necesario tener instalados 2 componentes que se incluyen en la redistribución
del CD-ROM de la aplicación (porque también se pueden conseguir en el sitio web de
Adobe gratuitamente): una impresora genérica PostScript y el conversor GhostScript
de Adobe. Si no lo hemos instalado, se mostrará un mensaje de que no existe el
componente, y cómo podemos instalarlo.

La salida es idéntica a la que se obtendría en papel (y se puede configurar la


impresora genérica PDF para que la salida del archivo sea en color, ya que por defecto
es en blanco y negro). Al pulsar se muestra un diálogo estándar para elegir el
directorio y nombre de archivo de destino (Como directorio se propone el directorio
actual de la base de datos, y como nombre de archivo se propone el nombre de base de
datos actual y el nombre de informe, separados por un guión bajo '_').

Al terminar de generar el archivo con el informe, se abre con el programa que se


tenga registrado en Windows para la extensión PDF (normalmente Adobe Acrobat
Reader).

Realiza la salida a un archivo con formato de texto rico (Rich Text


Format). En este caso, el archivo defecto.rtf se abre automáticamente con el
programa que tengamos asociado en Windows a esa extensión de archivos
(normalmente Wordpad o Ms-Word).

Con la salida en texto rico, obtenemos un documento o archivo, con un aspecto casi
idéntico al que se obtendría directamente por impresora: cabeceras y pies, líneas

Menú P royecto / 189


horizontales, texto con formato (negrita, diferentes tipos de letra, colores, etc.)
aunque algunos formatos más complejos como imágenes, tablas complejas, etc.
pueden ser distintas.

Abre la Ventana Configuración impresora para seleccionar


como actual una de las configuraciones predeterminadas —con la que se imprimirán
los informes que no tengan determinada ninguna configuración especial— o crear
una nueva.

muestra la ventana de parámetros del programa que tiene el


informe actualmente seleccionado. SIEMPRE están sincronizados el contenido de
esta ventana, con el programa del informe y la línea seleccionada en esta ventana:
moviendo cualquiera de los tres, se mueven los otros dos.

Pequeños botones a la derecha:

Desplaza carpeta hacia la izquierda y hacia la derecha , permiten cambiar el


nivel de la carpeta actualmente seleccionada. Sólo funcionan con carpetas.

IM PORTANTE: tenga en cuenta que si se adentra un nivel una carpeta, y la que está
encima de ella está cerrada en ese momento, como pasa a contenerla, la carpeta
padre se abre y muestra el contenido, que incluye la carpeta arrastrada.

Cambio de directorio: Permite seleccionar un archivo carpetas.prg de otro


subdirectorio bajo el directorio \INFORMES. Podemos tener más de una colección
de informes cada una con su propio índice.

Cambio de icono: Permite personalizar los iconos genéricos de los archivos de


programas con los que podemos seleccionar en el diálogo Selección de iconos. De
esta forma podemos identificar visualmente los que pertenecen a ciertas
ventanas del programa, herramientas, librerías...

Ventana informes favoritos

Este diálogo, aparece al pulsar de la barra de botones de la ventana


principal.

Esta ventana es similar a la ventana de informes y procedimientos, tanto en estética


como en funcionalidad.

Ventanas del programa / 190


, , y son
totalmente equivalentes a los cuatro tipos de salida de la ventana informes y
procedimientos: Permiten respectivamente, mostrar la salida en pantalla, papel, un
archivo ejecutable que contiene y permite visualizar e imprimir, o bien un archivo RTF
de texto rico (con negrita, subrayados, distintos tipos de letra, colores, etc.)

Abre el diálogo de configuración igual que en la ventana informes


y procedimientos.

Abre la ventana de parámetros del informe de la misma forma


que la ventana de informes y procedimientos.

Si hacemos doble clic con el ratón sobre uno de los informes de la lista (o pulsamos
INTRO, que es equivalente), la opción por defecto es la salida hacia Preliminar.

La lista de favoritos contiene un pequeño número de informes incluidos por defecto,


pero es totalmente personalizable, pudiendo añadir tantos informes como se deseen
desde la ventana de informes y procedimientos. Tanto la adición como la eliminación de
informes de la lista de favoritos, se puede hacer en modo multiselección para agilizar el
proceso.

Ventana Configuración impresora

Accesible desde de la ventana informes y procedimientos. Nos


permite definir los parámetros de impresión de las impresoras que tenemos instaladas,
y seleccionar la configuración de impresión por defecto para los informes (que incluye la
impresora a utilizar).

Los parámetros definidos o modificados se guardan en archivos de configuración (con


extensión .CNI) que se almacenan en el directorio \INFORMES. De esta forma, las
modificaciones realizadas en los parámetros de impresión por un usuario son
recordadas permanentemente por el sistema, hasta que vuelvan a ser cambiadas, pero
sólo para el usuario que las cambió.

Menú P royecto / 191


En la primera sección, tenemos una lista desplegable con las configuraciones definidas,
que permite elegir como actual cualquiera de ellas. Se pueden tener almacenadas
cualquier número de ellas.

Que permite guardar en la configuración actualmente


seleccionada, cualquier cambio hecho en la pantalla. Al salir de la ventana, aunque no
se cierre, también se graban los cambios en la configuración que se muestra
actualmente en la lista.

A continuación, otra lista desplegable que nos permite seleccionar la impresora que
deseemos entre las que tengamos instaladas en Windows.

Se definen cinco tipos de letra, representadas por cinco botones, con el siguiente
significado en los programas de informes:

Letra pequeña, usada en informes con muchas columnas.


En los programas de informes se selecciona con el modificador L0.

Letra normal, el asterisco indica que es el tipo de letra por


defecto, no necesita modificador.

Letra normal negrita, usada para resaltar determinados


valores. Modificador L2.

Letra grande, usada en la rotulación de capítulos y algunos


totales. Modificador L3.

Letra enorme, usada en los títulos de los informes.


Modificador L4.

A cada tipo de letra se le puede asociar como opción un color, pero no tiene efecto sobre
la impresión, es un valor que no se utiliza.

La forma de imprimir distintos colores en las fuentes, con una impresora en color, es
asignando un valor de color a los campos de impresión con el modificador

Ventanas del programa / 192


correspondiente de color RGB (vea como hacerlo en la referencia de programación con
JavaScript, o en alguno de los informes de ejemplo que se distribuyen con el programa).
También se pueden definir otros atributos como estilo, tachado y/o subrayado, tanto con
los modificadores del lenguaje, como en la definición de fuentes. Estos atributos se ven
en pantalla (Vista Preliminar) SIEMPRE, aunque la impresora seleccionada no sea en
color.

M argen superior, inferior, izquierdo y derecho: Con estos campos definimos los
márgenes de la hoja de nuestro informe con respecto a la zona hábil de la hoja de
impresión.

M argen de encuadernación con él definimos la medida de un margen extra que es


usado para encuadernación, es decir a la izquierda en las páginas pares y a la derecha
en las impares. Todos los márgenes hacen referencia al margen imprimible.

En la última línea aparece la información del tamaño real de la página a imprimir en


centímetros y en puntos (ancho x alto).

IM PORTANTE: El color se obtiene en vista preliminar, como si tuviésemos instalada


una impresora de color, aunque sea de blanco y negro, es decir, vemos todos los colores
definidos en los informes. En la salida de papel, en una impresora de blanco y negro, los
colores se aproximan lo más posible a las tonalidades de los colores, mediante una
gama de grises.

Ventana Vista preliminar

Accesible desde la ventana informes y procedimientos o desde el diálogo Selección de


destino -cuando el destino es Preliminar-, desde cualquier ventana con botón Imprime.
Esta ventana permite visualizar en pantalla la página exactamente igual que aparecerá
en papel, con todos los colores, gráficos y tipos de letra definidos en el programa de
informes.

Se trata de un interfaz WYSIWYG (Lo que se ve en pantalla es lo que se obtiene en


papel), y en este caso, lo que se ve pantalla es el resultado exacto, pero sólo cuando
tenemos un zoom del 100%. Con otros aumentos, y por motivos de redondeo en los
cálculos de puntos, en algún caso la última línea de la página puede pasar a la página
siguiente en la impresora, y en pantalla no suceder.

En el panel gráfico tenemos un completo interfaz de ratón y teclado, podemos utilizar el


ratón en las barras de desplazamiento horizontal y vertical para ver la zona que nos
interese. Podemos movernos paso a paso pinchando las flechas de las barras de
desplazamiento, página a página pinchando el fondo de las barras, capturar el deslizador
y desplazarlo o conseguir un movimiento continuo sin parpadeos pulsando si soltar el
botón del ratón sobre las flechas.

Con el teclado podemos utilizar las teclas Retroceder Página (RE.PÁG) y Avanzar Página
(AV.PÁG) para movernos hacia arriba y abajo por la página que se está mostrando.
Mediante las teclas INSERT y SUPR se aumenta o disminuye el zoom de forma
progresiva, en pasos de un 5% aproximadamente. Esta misma función de puede realizar
con la rueda del botón central del ratón (si la tiene), sólo que además, podemos

Menú P royecto / 193


seleccionar en cada paso la zona en la que nos acercamos o alejamos. Cuando se llega a
un aumento excesivo, se muestra de nuevo la página completa.

A la izquierda del todo de la ventana tenemos cuatro conmutadores con tamaños de


presentación (o zoom) predefinidos. Mientras no lo cambiemos, todas las presentaciones
preliminares se realizan con ese formato. Los posibles son:

Muestra la página completa.

Página que ocupa todo el ancho de la pantalla. Ideal para páginas verticales.

Página que ajusta su tamaño para que aparezca toda al página en vertical. Ideal
para formatos apaisados.

Zoom al 100% de toda la página que muestra el tamaño real a la resolución de


impresora.

Existen dos botones/iconos Ir a primera página e Ir a última página que


permiten desplazarse a éstas desde cualquier posición del informe.

y van avanzando o retrocediendo páginas si el


documento consta de varias. Si hemos seleccionado varios documentos a la vez para el
preliminar, al llegar a la última página y pulsar F1 o Siguiente, se pasa a la primera
página del siguiente informe.

Lleva la imagen de la hoja actual en el portapapeles de Windows, para


poder pegarla en cualquier otra aplicación. La imagen es igual a la generada con el
botón Exporta...

Imprime el informe en un archivo gráfico de formato EMF (Enhanced


Windows Metafile) que es la extensión más moderna del formato estándar WMF y está
soportada por la ventana Gráficos. Por defecto se salva con el nombre de archivo del
programa de informe, en el directorio actual, pero si cambiamos de directorio lo
recordará cuando guardemos más informes.

Si mantenemos pulsada la tecla MAYÚSCULAS mientras pinchamos en


, se imprime en un archivo de la misma forma que el anterior, pero
rotando la imagen del informe 90º a izquierda, es decir, dejando la cabecera del informe
(apaisado o no), en el margen izquierdo de la hoja.

IM PORTANTE : La imagen se guarda con color o no, dependiendo de si la impresora


configurada para la salida admite color o no, en la configuración de impresora. Se
guarda a la resolución deseada, en función de la vista preliminar actualmente en
pantalla (una imagen al 100% y en color puede ocupar varios Mb.).

Funciona exactamente igual que el de la ventana informes y


procedimientos, pero en este caso muestra un diálogo de confirmación y sólo manda a
impresora la página actual. Esto es muy cómodo para sacar hojas sueltas.

dibuja una línea roja que marca el área máxima imprimible de la

Ventanas del programa / 194


página. Esta línea se mantiene incluso haciendo zoom.

Diálogo Informe por impresora

Se muestra al mandar como salida de impresión la impresora desde cualquier sitio que
se pueda ejecutar un informe (la ventana informes y procedimientos, o la lista de
selección de destino desde cualquier ventana). Muestra el texto:

En caso de aceptar con el botón Si, se muestra:

Mientras dirigimos un informe a una impresora, podemos interrumpir la operación al


final de la página con el botón Interrupción, que aparece mientras se realiza el informe.

Si tenemos seleccionada una carpeta en vez de uno o varios informes:

Como es habitual en Windows, el programa manda al administrador de impresión del


sistema operativo los informes a realizar, y cuando acaba, es el administrador de
impresión quien gestiona la cola de impresión. Por esta razón, es habitual que la
aplicación haya terminado de generar un informe de varias páginas antes de que la
impresora haya empezado a imprimirlo.

Si la aplicación ha terminado de imprimir un informe largo, y cuando empiezan a salir


las páginas por la impresora vemos que hay algún error, no podemos utilizar ya el botón
Interrupción porque la aplicación ha terminado su trabajo. ¿Cómo interrumpir la

Menú P royecto / 195


impresión entonces?: la solución es cancelar el trabajo, pero en el administrador de
impresión de Windows.

Ventana Programa JavaScript

Accesible haciendo doble clic con el ratón sobre la columna Código de la lista de
programas en la ventana informes y procedimientos, o bien, manteniendo pulsada la
tecla CONTROL al hacer clic sobre el botón Parámetros. La ventana Informe - <archivo>
· <descripción> (archivo y descripción corresponden al archivo de texto con extensión .
xjs, que tenemos seleccionado en la ventana informes y procedimientos), nos permite
modificar, editar y probar la ejecución de los programas que hay en la lista de la
ventana.

Esta ventana es “hija” o dependiente de la ventana informes y procedimientos, lo que


quiere decir que siempre están sincronizadas: la línea seleccionada en la lista, es el
programa que es muestra en esta, y se cierran al mismo tiempo, por ejemplo.

La segunda sección es un campo de texto multilínea y rico (RTF) que permite la


visualización y edición del contenido del programa. El formato RTF permite almacenar
las características de sangrado, colores, etc. Se pueden editar desde fuera del programa
con cualquier editor de texto, ya que sólo es texto rico en esta ventana y se guarda como
un archivo de texto estándar.

NOTA: Al editar fuera de la ventana de programa tenga cuidado con la medida de los
tabuladores, ya que puede descuadrar las alineaciones de todos los archivos que
cambie. La ventana tiene tabuladores de 6 espacios (como Wordpad de Windows por
defecto), pero por ejemplo, el bloc de notas de Windows tiene 4 espacios; puede
comprobarlo abriendo con él un archivo .xjs y verá que las alineaciones cambian.

La sintaxis de los programas de informes se recoge en archivo anexo de Lenguaje


JavaScript y en las extensiones COM que la aplicación hace de ese lenguaje. En la guía
de usuario tiene documentada la programación de informes.

Como estructura general, diremos que hay que crear un objeto impresor, y sobre él, lo
habitual es utilizar definición de variables globales, definición de tablas, impresión de
líneas (dentro de las tablas), cabeceras y pies de página (iguales en todas ellas),
respectivamente con:
imp=impresor

imp.global("...")

imp.tabla()

paginicia()

imp.linea()

pagtermina()

Al definir características para un campo, la prioridad de mayor a menor es: campo-


línea-columna-tabla-global; es decir, un modificador de una columna no tiene validez si
se define otro distinto en una línea o para un campo particular.

Ventanas del programa / 196


Presenta en pantalla el informe del programa siguiente en la lista de
informes o programas de la ventana informes y procedimientos. Si hubiera mostrado ya
el último, empezaría otra vez por el primero.

Presenta en pantalla el informe del programa anterior en la lista de


los Informes de la. Si hubiera mostrado ya el primero, empezaría otra vez por el último.

Presenta el diálogo:

Y se nos sugiere el nombre del archivo actual para modificarlo.

Crea un informe copia del actual, debajo de la línea del que teníamos
seleccionado.

Refresca los cambios de colores hechos en pantalla, y que no se


hayan refrescado.

Abre la Ventana vista preliminar para visualizar la página tal y como


saldrá en papel.

Lanza el informe completo actual a la impresora configurada,


exactamente de la misma forma como se hace desde la ventana informes y
procedimientos.

Nueva ventana: Permite crear un "clon" de la ventana del programa actual. La


única diferencia es que tiene desactivados los botones Siguiente y Anterior, y está
desincronizada de la selección actual en la lista de programas, podemos abrir tantas
como queramos y son muy útiles para editar cabeceras o programas con librerías,
porque al igual que en la ventana original de programa, podemos validar los cambios
en cualquier momento.

Programa a Bloc de notas: Sirve para abrir el editor de textos que tengamos
registrado para archivos .txt, con una copia del programa y así permitirnos una
funcionalidad extra: poder mantener varias vistas de distintos informes
simultáneamente (ya que al seleccionar distintos informes en la lista de programas,
va cambiando el contenido de esta).

IM PORTANTE: Si mantenemos pulsada la tecla CONTROL al hacer clic, el texto se abre


con el programa Wordpad de Windows, que edita texto rico, y por lo tanto podemos ver y
modificar el texto con su fuente, colores, tabulaciones... pero tenga en cuenta si va a

Menú P royecto / 197


grabar los cambios, que los archivos .XJS son de texto plano, no RTF.

Recuerde que en el menú contextual de la ventana de programas tiene toda la


funcionalidad que puede buscar en un editor como Wordpad: buscar, reemplazar, poner
sangría, imprimir...

Ventana Parámetros del programa

Accesible desde en la ventana informes y procedimientos.


Muestra parte de información que hay en el programa del informe actualmente
seleccionado en la lista de la ventana, para que el usuario pueda ver y modificar de una
forma más cómoda ciertas variables.

Si en vez de abrirse desde esta ventana, se trata de la pestaña del diálogo de selección
de destino, los botones al pie cambian, pero el funcionamiento es exactamente igual.

Todas las variables VAR de un programa, cuyos valores van seguidos de una especie de
"doble comentario" (cuatro barras inclinadas //// en vez de dos // que es el comentario
en lenguaje JavaScript), se consideran variables que hay que representar en la
ventana de parámetros para que el usuario pueda cambiar su valor y así modificar la
salida del informe sin necesidad de tocar los programas.

En la ventana de programa, las variables son del tipo:

var titulo1="PRECIOS" //// Título principal [["CUADRO Nº 1 Y 2"]]

var conletra=1 ////B Precios en letra [[1]]

var condosmonedas="EUR" //// Moneda secundaria en precios e importes


EUR,ESP,USD... [[""]]

Estas líneas de parámetros se componen de estas partes:

a. Se define el valor de la variable de una forma normal, mediante una igualdad.

b. A continuación se ponen las cuatro barras de comentario "////", que pueden ir


seguidas de los valores ‘P’ y/o ‘B’ (en ese orden) que indican respectivamente,
que el parámetro es de tipo Privado (es decir, cualquier programa que incluya el
código de éste, no tendrá en cuenta la variable), y Booleano (es decir, que los
valores 0 y 1 se traducirán en pantalla como No y Si, respectivamente, y será
posible cambiarlos mediante un simple clic de ratón en la línea de la variable).

c. Detrás tenemos un rótulo que será el nombre mostrado para el parámetro. Esto
quiere decir, que aunque nuestra variable se llame —como en el ejemplo de
arriba—, “conletra”, en la ventana aparece “Precios en letra”.

d. Entre dobles corchetes ‘[[ ]]’ podemos poner un valor de la variable que sea el
valor “por defecto”. Pulsando el botón Defectos de la ventana, todas las variables

Ventanas del programa / 198


ponen este valor.

En la ventana de parámetros se muestra el nombre del informe y debajo, las líneas con
las variables. En principio se muestran dos columnas: Descripción, con un comentario
explicativo de la variable, y Valor, aunque existen otras dos que podemos mostrar si nos
interesa: Parámetro (que muestra el nombre real de la variable a efectos de programa) y
Programa (que es el nombre de archivo en el que está definido cada parámetro).

Las líneas de variables pueden presentar dos colores: El color de “datos en


relaciones” (por defecto violeta) muestra los parámetros considerados por incluir otros
programas, y en color negro (siempre al comienzo de la lista de parámetros), los
parámetros definidos en el programa seleccionado actualmente.

Para cambiar los valores de los parámetros, siempre hay que hacer doble clic sobre la
línea deseada. En el caso más habitual que es el de variables con valores Si/No, se
cambia el estado. En variables que requieren introducir una cadena de caracteres, o un
valor, se muestra un diálogo "cambiar parámetro" para hacerlo.

IM PORTANTE: Los cambios en las líneas de parámetros se reflejan directamente en el


programa de informe, modificándolo. Por ejemplo, si el programa del informe que
tenemos abierto actualmente incluye otro programa que aporta a esta lista el
parámetro conletra, y lo cambiamos poniéndolo a cero “0”, el archivo .xjs del otro
informe quedará grabado con un var conletra=0

Presenta en pantalla la lista de parámetros del siguiente programa


(sólo se tienen en cuenta las carpetas abiertas) en la relación de informes y
procedimientos. Si hubiera mostrado ya el último, comenzaría de nuevo por el primero.

Presenta en pantalla los parámetros del programa anterior en la lista


de informes y procedimientos.

Abre el Diálogo programa nuevo.

Permite recuperar los valores que tenía originalmente el informe en


cada parámetro, por si hemos hecho muchos cambios en ellos y no nos acordamos de los
originales. Se muestra un diálogo de confirmación que permite restaurar los
parámetros de la o las líneas seleccionadas, o bien todos los del informe.

Abre la Ventana vista preliminar para visualizar la página tal y como


saldrá por impresora, igual que en las ventanas de Impresión y Programa.

Menú P royecto / 199


Lanza el informe completo actual a la impresora configurada,
exactamente de la misma forma como se hace desde la ventana informes y
procedimientos.

Ventana Configuración global de parametricos


Esta ventana contiene toda la información referente a librerías Javascript y
paramétricos globales.

Pestaña Parámetros Globales


Esta pestaña da la posibilidad de mantener un programa como el contenido en la
pestaña Paramétrico, pero que modifique a todos los parámetros de la base de datos,
es decir: es global a todos (por ejemplo, un parámetro que incremente de diversas
formas cualquiera de los precios, por transporte o dificultad de entrega o pago, una
definición de varias monedas, ámbitos de precios, etc.)

Es opcional, y no tiene porqué estar definido, pero si lo está, se incluye el código en


TODOS los programas de la base que está abierta: no se actualiza, ni cambia con
cada concepto que esté definido como una familia paramétrica, sino que es una
ventana con selectores de opciones comunes a todas las familias del archivo.

Las variables definidas en los parámetros de ésta ventana, podrán ser utilizadas en
cualquier descripción paramétrica del archivo. Debido a que entrarán a formar parte
de las descripciones paramétricas, al seleccionar unos u otros valores, podemos ver
incluso como cambian los derivados paramétricos que tenemos seleccionados.

En el panel superior, se muestran en columnas los parámetros con sus valores para
seleccionar, si hay una descripción definida. En el inferior, el programa en lenguaje
paramétrico tradicional o en JavaScript, o compilado en DLL (en cuyo caso sólo se
muestra el rótulo "DLL" ya que a información está compilada y protegida).

Pestaña Librerías JavaScript


Su utilización es similar a la pestaña anterior: permite definir un código global
común a toda la ejecución de programas paramétricos. En este caso, no tiene utilidad
para definiciones paramétricas en lenguaje tradicional -que tiene su estructura y
sintaxis muy cerrada-, sino que se usa para definir funciones (de cálculo, validación,
mensajes de error, chequeo...) para poder utilizar en todas las definiciones
paramétricas sin tener que escribir ese código en todas.

Ventanas del programa / 200


Es simplemente como una cabecera de librería que siempre se va a ejecutar con
cualquier paramétrico en JavaScript de la base de datos, incluidos los parámetros
globales.

El campo Librería DLL permite especificar el archivo en el que se encuentran


compiladas las descripciones paramétricas (cuando utilizamos esta opción).

Ventana Fases
La importancia de las fases de obra van más allá de una simple ventana de datos más o
menos interactivos con otros tipos de conceptos del archivo. La lista de fases componen
los múltiples hitos de nuestra ejecución de proyecto. Por ejemplo, en un proyecto de
obra, representan las certificaciones (mensuales, semanales, o de cualquier periodo),
en un proyecto de seguimiento y control de obra, pueden representar las fases de
construcción y progresión real de obra...

Comparando con versiones anteriores de Menfis, las fases representan los múltiples
archivos de certificación (más el archivo inicial de presupuesto o proyecto), unidos en
un único archivo de base de datos.

IM PORTANTE: Tenga en cuenta que cada concepto en cada fase puede tener distintas
cantidades y precios. Puede tener, significa que al crear una fase nueva (excepto la
primera), todas las cantidades y precios son iguales que en la última fase. A partir del
momento de tener creada la nueva fase podemos cambiar, lógicamente, las cantidades
(ese es el uso de las fases precisamente), pero además podemos modificar los
rendimientos de unidades de obra con descomposición y los precios de los recursos en
cada una de las fases.

La primera fase no se crea copiando mediciones (pero sí precios y rendimientos), porque


esto no sería de utilidad al comenzar a certificar.

Podemos tener además múltiples precios dentro de una misma fase, para un sólo

Menú P royecto / 201


concepto (de clase recurso), utilizando ámbitos de precios.

IM PORTANTE: Otra peculiaridad en múltiples fases o "fotos" de la estructura del


archivo en diferentes momentos, es que no se pueden eliminar conceptos o relaciones
de la estructura de conceptos, si intervienen con alguna cantidad en alguna fase o en el
proyecto.

Pestaña Fases del concepto actual:


Muestra Tipo, Código y Resumen del concepto actual y encima de esa línea, los datos
de su concepto padre, ya que para los datos de Cantidad e Importe, es necesario saber
a cual de las relaciones que tiene un concepto con su padre nos referimos (como
siempre, esto es debido a que cualquier concepto puede tener varios padres).

Haciendo doble clic en cada línea, podemos seleccionarla como fase activa (con lo que
se muestra en negrita), igual que desde la ventana principal o desde la pestaña
Definición de fases.

Cantidad: Podemos cambiar mediciones de cualquiera de las fases sin tener que
presentarlas en la ventana principal, y tenemos accesibles todas las mediciones de
múltiples fases, juntas. Además podemos editar la Cantidad parcial (diferencia con la
fase anterior) y visualizar el cálculo de Importe parcial.

Los colores de los datos de Precio, Cantidad e Importe, son los mismos que en la línea
de concepto en la ventana principal.

Pestaña Definición de fases:


Tenemos la misma lista de todas las fases existentes en el archivo que en la pestaña
anterior, pero aquí podemos editar la Descripción de todas ellas para adecuarlas al
término que más convenga a nuestro conceptos de fases, y podemos editar otra
característica fundamental: el periodo de fechas que abarca cada fase.

Ventanas del programa / 202


Número: Es un campo automático que no se puede asignar y va cambiando, si
eliminamos o cambiamos fases de orden.

Fecha final: Admite una fecha, y en cambio, Fecha inicial se establece


automáticamente con el mismo día de la fecha de finalización de la fase anterior,
excluido. Es decir, siempre son continuas sin un solo día de intervalo entre una fase
y otra.

Coef. Actualización: Se utiliza para guardar un coeficiente de revisión de precios,


que puede cambiar en cada una de las fases. Luego se puede utilizar en informes o
para hacer cualquier cálculo.

Existen otros campos que se pueden mostrar como F.Presentación, F.Factura y otros
para almacenar fechas relacionadas con cada una de las fases.

Bloqueo: Indica el estado de bloqueo de edición de cada fase a origen. Haciendo clic
en esta columna para cada línea, podemos editar el estado de bloqueo igual que con
el botón al pie de la ventana.

Permite dar de alta nuevas fases, mediante un diálogo que


siempre sugiere una descripción inicial del tipo: "Fase <num>. <mes> <año>" que
podemos cambiar. Las Mediciones de la fase anterior (excepto si es la primera que se
crea, en la que todas las mediciones son cero) se copian para tener la referencia a
origen de lo ya certificado.

Permite poner de nuevo los datos originales en la fase


seleccionada, aunque sea intermedia, para tener los datos como cuando se creó. Se
da la opción de poner las Mediciones de partidas de la fase anterior, los rendimientos
(Descomposición), o Todo, que es la opción habitual.

O la tecla SUPR teniendo seleccionada una línea, permite


eliminarla junto con todos sus datos relativos, después de un diálogo de confirmación.

Pestaña Documentos en fase actual:


Lista no editable de TODOS los documentos de la Fase actual, es decir, cuya fecha
está dentro del periodo de la Fase. La información que se ofrece es Tipo, Código ·
Resumen del concepto en el campo Documento, y también el Contrato relacionado
con cada uno, si es aplicable. Por último las características más importantes de los
mismos: Fecha y Precio. Las dos columnas que tienen un asterisco (*) en el nombre,
permiten acceder contextualmente a cada elemento de información, de la forma que
se ve en el tema ventanas de propiedades.

Menú P royecto / 203


Botones al pie
En cualquiera de las pestañas, tiene el mismo efecto con la línea
de fase seleccionada, que pulsar el botón de bloqueo de la ventana principal para la
fase actual, o hacer clic en la columna Bloqueo de la pestaña Definición de fases.

El bloqueo impide la edición de datos relacionados con la fase: relaciones, eliminar


conceptos, cambiar mediciones, etc. no se impide la edición de datos de concepto.

Las fases se bloquean a origen (al bloquear una, todas las anteriores quedan
bloqueadas, pero las siguientes no), y para desbloquear hace falta que el usuario
tenga permisos de administrador.

Ventana Ámbitos
Los ámbitos de precios tiene una importancia tan grande en los archivos de proyecto,
como las fases de obra.

Consisten en una lista de valores asociados a un rótulo, similar a los datos que podemos
almacenar en la ventana Valores; la diferencia es que estos precios son completamente
interactivos en el presupuesto y existen (y pueden ser distintos) para todas las fases si
lo deseamos. En general, en una lista de distintos precios que se pueden asociar a
cualquier concepto simple para que acumule distintos presupuestos a través de sus
padres hasta el concepto raíz. Como excepción tenemos la ruptura de ámbitos, que
permite a un conceptos descompuesto (es decir, su precio viene dado por la suma

Ventanas del programa / 204


calculada de los subtotales de su descomposición), tener un precio "virtual" en un
ámbito, que no corresponde a su descomposición.

El estado Calculado (configurable en el menú Herramientas), se considera para TODAS


las fases y TODOS los ámbitos a la vez, recalculándose todo el presupuesto para todos los
conceptos cada vez que hacemos cualquier modificación en Cantidad o Precio.

En ventana principal, los conceptos que tienen múltiples precios en distintos ámbitos,
se muestran de color datos alternativos (por defecto verde), para llamar la atención
sobre el ámbito activo en la ventana principal.

Pestaña Ámbitos del concepto actual:


Muestra los datos de Tipo · Código · Resumen para el concepto seleccionado en
ventana principal, y la lista de todos los ámbitos definidos con el Precio del concepto
actual para cada uno. El primer ámbito (precios de defecto de la base de datos),
mantiene siempre color negro en el precio, aunque existan precios distintos, pero en
general, cuando sólo existe un precio y todos los ámbitos muestran el mismo, todos
son de color negro. Si hay uno o más ámbitos de precio distinto, el color de cada uno
distinto al Precio por defecto es el predeterminado para datos alternativos.

En la pestaña Letras y colores de la ventana Opciones podemos ver y modificar los


colores utilizados.

Pestaña Definición de ámbitos:


Muestra una lista de todos los ámbitos, con su Número (de gestión automática, no
podemos modificarlos), su Descripción, y si lo deseamos, la columna Referencias, que
muestra cuántos precios distintos de los del ámbito principal hay en cada uno de los
demás. Aquí se permite dar de alta ámbitos nuevos y modificar el nombre de los
existentes.

Menú P royecto / 205


El doble clic en las líneas tanto en esta pestaña como de la anterior, permite
seleccionar ese ámbito como actual. El archivo no es necesario que esté en modo
Edición para cambiar de ámbito.

Permite dar de alta nuevos, mediante un diálogo que siempre


sugiere una descripción inicial del tipo: "Ámbito <num>" que podemos cambiar. Todos
los precios se mantienen como copia del ámbito principal, mientras no cambiemos
alguno explícitamente.

O la tecla SUPR teniendo seleccionada una línea, permite


eliminarla junto con todos sus datos relativos, después de un diálogo de confirmación.

Elimina todos los precios de l ámbito seleccionado sólo para la


fase actual, no afecta a ningún dato de ese ámbito en las otras fases.

Ventana Planifica Tareas


La ventana permite planificar gráficamente el calendario anual y mensual de tareas de
obra, así como acceder rápidamente a las propiedades de cada Tarea y a la lista de las
mismas diariamente.

Pestaña Calendario anual:


En la primera línea tenemos el año seleccionado (siempre que se abre la ventana,
por defecto se muestra el año actual). Los datos de los 2 paneles inferiores son
independientes de el/los conceptos seleccionados en la ventana principal.

Ventanas del programa / 206


Panel superior: Unidades de obra

El primero con un árbol de todos los niveles de capítulos que contienen Actividades
(haciendo doble clic sobre cada línea de Actividad tenemos acceso a su ventana de
propiedades), y a continuación los 12 meses del año y en cada línea el número de
Tareas por cada actividad (en las líneas de capítulos, la suma de todas las tareas de
las actividades de ese capítulo, claro).

Haciendo clic en los botones de la cabecera de la lista, accedemos a la pestaña


Cuadrante mensual del mes seleccionado.

Panel inferior: Recursos horarios

Muestra un árbol con todos los tipos de recursos, y bajo cada rama, todos los recursos
del proyecto. El cálculo en las columnas de meses del número de horas necesarias
para ejecutar las tareas sólo se recalcula cada vez que pulsamos

Pestaña Calendario mensual:


Como en la pestaña anterior, en la primera línea nos encontramos el mes, el año
seleccionados mediante los botones la pie de la ventana.

Panel superior: Unidades de obra

La división de los datos es en días e igual que en la pestaña de calendario anual, al


hacer clic sobre la cabecera de la columna del día, pasamos a la pestaña que lo

Menú P royecto / 207


detalla.

En la primera columna podemos ver los capítulos y actividades de obra, ordenados


según la estructura de proyecto. A continuación se encuentra representado un
diagrama de duración de tareas, en las que cada segmento es una tarea, y el número
de columnas que ocupa, la duración en días. El número que va en la barra de color
indica el Código de la Tarea, y haciendo doble clic sobre la barra, se abre la ventana
de propiedades de la misma.

El color que aparece en cada barra o en las columnas, tiene su leyenda y


personalización en la pestaña General.

¿Cómo reubicar las Tareas en el cuadro?

Aquellas Tareas posteriores a la Fecha de bloqueo del archivo (bloqueo que protege
cualquier movimiento), podemos desplazarlas adelante o atrás en el tiempo, y
aumentar su duración.

Para modificar la fecha prevista, de inicio o finalización, hacemos clic el día de


destino mientras mantenemos pulsada la tecla CONTROL. Si hacemos clic a la
derecha de la barra, desplazamos el día de finalización, y si pinchamos a la izquierda,
establecemos el nuevo día de comienzo. Al modificar estas fechas, naturalmente,
también cambiarán los datos en la ventana de propiedades de la Tarea.

Para cambiar la duración de la tarea, haremos clic con el ratón a izquierda o derecha
de la barra, manteniendo pulsada la tecla MAYÚSCULAS. Si el clic lo hacemos sobre
la barra en vez de a los lados, acortaremos la duración hasta ese día.

Panel inferior: Recursos horarios

El cálculo de horas de cada concepto de Tipo recurso, se realiza igual que en la


pestaña calendario anual, pero con el cálculo en días en vez de totalizar por meses.

Pestaña Calendario diario:


En la primera línea nos encontramos el día de la semana, con la fecha completa como
en las pestañas anteriores.

Seguidamente tenemos la lista de conceptos de las diferentes Tareas a realizar ese


día, con las dos fechas que marcan el periodo de ejecución: Fecha inicial y Fecha

Ventanas del programa / 208


final, así como el Capítulo y Unidad al que hace referencia la Tarea. (Recuerde que al
ser columnas con un asterisco '*', haciendo doble clic en esa parte de la línea,
accedemos de forma contextual a esos datos: Haciendo doble clic en cada línea,
abrimos los datos de cada Tarea).

Pestaña General:
Contiene herramientas para montar automáticamente Tareas, y personalizar la
visualización del cuadrante.

En el primer campo de la sección Programación tenemos el primer día en el que


comenzará la futura programación. Este día se sugiere en el campo Fecha de
recepción inicial, en la ventana de parámetro generales. El siguiente campo admite
el último día de programación.

También podemos seleccionar si queremos o no, incluir Sábados y Domingos a


nuestra planificación, simplemente marcando o desmarcando el conmutador
correspondiente.

Permite automatizar una primera aproximación a la


distribución temporal de tareas.

IM PORTANTE: el uso de esta función elimina todas las tareas existentes en el


archivo, y crea una única tarea por unidad de obra (que luego podremos dividir en
más, si nos conviene). Las tareas se crean consecutivamente en el orden en que se
ha definido la obra por capítulos. Tenemos 3 posibilidades:

Con Prop.cant.horas dividimos todas las horas en recursos de todas las


unidades de obra, a partes iguales en el periodo entre desde la Fecha inicial y
hasta la Fecha final de programación.

Menú P royecto / 209


Con Prop.importe, hacemos la división en función del importe total de recursos
por unidad de obra (en este caso, aunque sea de materiales, las que tengan
más importe, durarán más).

Con Iguales, se crea un número de tareas igual al de unidades de obra, y todas


tendrán la misma duración.

En la sección Colores, cada botón nos permite personalizar los que representan los
datos en las pestañas anteriores. Haciendo clic en cada uno de los botones, se
muestra un diálogo estándar de selección de color. El último botón Poner colores de
defecto, restaura los que inicialmente se proponen al distribuir el programa.

Lista de festivos
Nos muestra una lista configurable con los días festivos del año. Desde la barra de
edición podemos añadir días o modificar los existentes.

Ventanas del programa / 210


Botones al pie de la ventana:
Los dos primeros botones cambian de nombre según la pestaña que estemos viendo,
pueden mostrar Año siguiente, Mes siguiente o Día siguiente y ... anterior, pero su
función es siempre moverse entre el siguiente/anterior elemento que corresponda
en cada pestaña. (en la última pestaña están deshabilitados)

Realiza el recálculo de recursos en las pestañas Anual y M ensual,


en función de la cantidad de recursos asignados en las tareas diarias. Como el
recorrido por cientos de actividades con decenas o centenares de recursos podría ser
muy lento, este recálculo no es interactivo y se ejecuta solamente cuando pulsamos
el botón.

IM PORTANTE: Si pinchamos en el botón manteniendo pulsada la tecla CONTROL, se


nos ofrece un cálculo bastante importante: disponibilidad de cada uno de los recursos
cada día en función de los turnos definidos para cada una de las personas y equipos
relacionados con la especialidad.

Ventana Ajusta presupuesto


Esta ventana nos presenta los presupuestos por cantidades y rendimientos de los
conceptos simples del proyecto, agrupados por Tipos y Clases de concepto, o
clasificaciones. También muestra el presupuesto total por cantidades del proyecto, que
es prácticamente el mismo que el presupuesto por partidas, hay una pequeña
diferencia que es inevitable por redondeos. Tenga en cuenta que esta ventana no se
destina a ajustar el presupuesto de FASES, solamente tiene sentido para el
PRESUPUESTO.

Al abrir la ventana, se muestran los grupos por tipos, a menos que se tenga activado el
conmutador, para añadir filtrados a los grupos, y crear nuevos grupos.

El presupuesto por cantidades de un grupo se calcula de la forma:

presupuesto_grupo = sumatorio (precio_concepto * cantidad_concepto *


(1 + coeficiente_costes_indirectos))

Esto se puede ver en Presupuesto por mediciones y presupuesto por cantidades.

Podemos modificar:

Menú P royecto / 211


Factores que afectan globalmente a los precios de un grupo de conceptos
simples, a los rendimiento o a ambos, viendo inmediatamente el presupuesto
parcial y global resultante.

Presupuesto parcial de un grupo, calculándose inmediatamente los factores de


precio y rendimiento del grupo, necesarios para ello (en proporción a sus
valores iniciales).

Presupuesto total de la obra, calculándose inmediatamente los factores de


precio y rendimiento de todos los grupos necesarios para ello (en proporción a
sus valores iniciales).

En la lista de la ventana tenemos una línea por cada grupo cuyo ajuste interesa en el
presupuesto, y muestran datos en las columnas:

Los pares T y Tipo, así como C y Clase, muestran el icono y el nombre del Tipo y Clase
de cada uno de los grupos. A continuación puede aparecer o estar oculto el par N y
Naturaleza, según tengamos activado o no el filtro mediante el conmutador al pie de la
ventana.

Las columnas Nº, % y Presupuesto son campos informativos, no editables. El primer


campo presenta el número de conceptos que componen cada grupo, la segunda columna
el porcentaje que cada grupo representa en el presupuesto total y el tercero se rotula el
presupuesto por cantidades original y actual de cada grupo.

Las siguientes 3 columnas son las únicas que contienen campos de edición, es decir,
las que permiten hacer las modificaciones de presupuesto según diversos criterios. La
de presupuesto por grupos Modificado y las dos últimas son complementarias, es decir,
que haciendo cambios en Modificado, se cambiarán las proporciones en precios y
rendimientos, y viceversa.

La columna Modificado muestra en principio los mismos datos que la de Presupuesto,


pero mediante el campo de edición al pie, permite introducir cambios en los totales de
presupuesto por grupos, este cambio se manifestará en precios y cantidades en la
proporción indicada en las columnas Fac.Pre. y Fac.Ren.

El importe cambiará con los siguientes criterios:

Si no hay factor de precio ni de rendimiento definidos no se puede modificar el


presupuesto parcial, éste volverá a su valor original.

Si sólo hay factor de precio u factor de rendimiento, éste se modifica para


conseguir el presupuesto modificado.

Si hay factor de precio y factor de rendimiento, se modifican los dos para


conseguir el presupuesto parcial en proporción a sus valores originales, es
decir, si un factor es 1 y el otro 2, los factores resultantes estarán en la misma
proporción.

Las columnas Fac.Pre. y Fac.Ren. modifican precios y/o rendimientos en forma de


proporciones, por ejemplo: el valor "1,000" no afectará a los presupuestos, pero indica
que se tomará en cuenta este factor en los ajustes parciales del grupo o globales de la
obra. Podemos poner cualquier valor, que inmediatamente repercutirá en el
presupuesto parcial del grupo que ha sido modificado y en el presupuesto total de la

Ventanas del programa / 212


obra.

Podemos conservar los datos originales siempre que tengamos marcada la casilla
Realizar copia de seguridad antes de ajustar.

Abre un diálogo de confirmación, para modificar realmente el


presupuesto, e informa de que afectará a TODAS las fases (mediciones al modificar
cantidades), pero NO AFECTARÁ a los ámbitos, sólo al actual. Cuando el archivo tiene
definidos múltiples ámbitos de precios, el ajusta afecta a los precios del ámbito actual,
igual que si de un precio único se tratara.

Toma como característica para ese filtro la clasificación


Naturaleza (organización) que tenemos accesible desde la ventana de propiedades de
Recursos. Todas las Clases de recursos se pueden clasificar de esta forma.

Ventana Hoja final


Esta ventana permite editar un texto personalizado, pero no como texto simple en un
bloque, sino una lista de líneas que incluyen cálculos con algunas variables que
acceden a los datos de cada fase. La hoja se guarda dentro de la base de datos, PARA
CADA FASE, y en cada una se pueden insertar líneas con el formato: Descripción /
<Clave de tipo o valor> / Importe

Su finalidad es definir datos que pueden asociarse a informes de resumen.


Generalmente son datos de cifras de la obra (coeficiente de adjudicación, IVA, beneficio
industrial, y cálculos con los totales de la obra y las certificaciones). En cierto modo es
como parte de un informe totalmente configurable, y a la vez, como una calculadora o
breve hoja de cálculo.

En la primera sección aparece el rótulo de la fase a la que se refiere la hoja final que
estamos viendo: “Hoja resumen: <nombre_de_fase>”. Antes del nombre de fase puede
aparecer el texto "*** DE DEFECTO ***", que indica que no se ha grabado ninguna
modificación en la hoja, y que por lo tanto, es una copia de la plantilla por defecto.

La Descripción resume el concepto de la línea, y es el rótulo que saldrá impreso en caso


de utilizar la tabla para algún informe. En este campo se admite el caracteres tabulador
de centrado '\b' (por ejemplo, si ponemos los dos caracteres a la izquierda de un rótulo,
el texto de alineará a la derecha, y si ponemos uno a cada lado, se centrará).

Los códigos S[n] P C L[n] v v%[n] - pueden ser: S[nº de línea] (Suma), P (suma Parcial), C
(Certificación anterior), L[nº de línea] (importe en Letra, actual u opcionalmente, de
otra línea 'n'), v (Valor constante), y v%[nº de línea] (valor en porcentaje y
opcionalmente, el porcentaje se refiere a una línea concreta 'n'), - (Raya separadora).

Para entender bien el funcionamiento de los cálculos, partimos del supuesto de


que existen dos variables al comienzo de la hoja, SUM (suma total) inicializada
al valor del presupuesto de la fase, y PAR (Parcial) inicializada a cero. Estas dos
variables tienen relación con los códigos S y P, respectivamente.

Menú P royecto / 213


Las líneas de tipo porcentaje, se aplican por defecto al valor de la última SUM,
se pueden también aplicar a cualquier línea introduciendo el número de línea
detrás del carácter '%'. Por ejemplo: 13%6 indica el 13 por ciento sobre el
importe de la línea Nº 6. Si se insertan o eliminan líneas por encima de la 6ª, la
referencia introducida se automodifica para seguir apuntando a la línea
original. El valor se va a acumulando en la variable PAR.

El código C equivale a coger el Presupuesto de ejecución material (P.E.M.) de la


Fase anterior —tanto si es una certificación, como el proyecto—, aplicarle y
operar todas las líneas anteriores a esta, que intervienen en PAR, para que se
apliquen los mismos cálculos que a la certificación actual, y poner el resultado
con signo negativo para dejar solamente el importe de la certificación actual a
origen.

El código S imprime la suma total SUM, acumulándole el valor parcial PAR


desde la última línea S, y pone el valor PAR=0.

El Importe es un cálculo automático en función del tipo de línea.

Veamos sobre el siguiente ejemplo, una utilización de todas estas claves:

S imprime (8) el valor actual de la variable SUM, añadiéndole el valor que tenía en
la última S (1) sumado a la variable PAR que va acumulando el parcial (3+4+6), y
luego pone el parcial a cero. La variable SUM está inicializada al valor de la fase
actual, por eso en la primera línea (1) tiene valor 37.432.01 que es el importe a
origen de la fase actual.

Si S (20) especifica una línea (6), se añade a la suma total el importe de esa línea
2.245,92 y TAMBIÉN pone el parcial a cero (21).

C imprime el importe de la certificación anterior a origen (10), que es 35.322,89,


sumándole las mismas operaciones que el parcial PAR que llevamos, para que la
diferencia sea coherente: 35.322,89+3.350 (3)+13% (4) de 35.322,89=4.591,98+6%

Ventanas del programa / 214


(6) de 35.322,89=2.119,37 TOTAL: 45.384,24 con signo negativo.

Cualquier línea puede llevar un valor fijo (3), que se opera donde corresponda y se
acumula al parcial PAR (que en este caso se acumulará a la última S (1)).

El valor, en vez de fijo, suele ser un porcentaje (14) que se aplica a la última línea
de suma (12). Si además especificamos una línea en concreto (18), el porcentaje
se aplica al valor de esa línea (14). Aquí le aplicamos el 10% a 401,58 que era el
16% del 2.509,85.

Claves que no influyen en los cálculos:

Un rótulo de texto (20 ó 22) como comentario.

Con P (5) el valor de la variable parcial tampoco influye en los cálculos. Imprimir
el parcial desde la última línea S (1), nos da la suma de las líneas que llevamos
acumuladas (3 y 4), pero ese dato no se acumula, ya que vemos que la suma (8) no
incluye la línea (5).

Las líneas L sólo muestran en letra, con el idioma actual del programa (está en
inglés) y moneda del archivo, el importe de la última impresión de SUM: En (21)
en letra la línea (16) y en (23), hemos especificado imprimir la línea (10).

****************************

IM PORTANTE: Para importar datos que no pertenecen al estándar FIEBDC, igual que
hacían otras versiones anteriores de Menfis, basta con exportar en formato INX (el
interno del programa), que exporta todos los datos obtenidos, incluyendo por ejemplo, las
hojas finales de todas las fases, que se almacenan en base de datos.

Muestra el diálogo estándar Importa resumen, que nos presenta todos


los archivos con extensión .RES del directorio \MACROS. Todos los archivos de resumen
se deben almacenar en este directorio. Los archivos son plantilla que se pueden cargar
en el archivo, y una vez en pantalla modificarlos a nuestro gusto. No hace falta grabar
nada, ya que sólo con abrir la ventana se graban los datos. Los archivos .RES son
archivos de texto plano con códigos que se pueden editar desde cualquier programa
como el bloc de notas, aunque es más cómodo hacerlo desde esta propia ventana.

Aunque los datos de las distintas tablas resumen para las distintas Fases son similares,
la presentación de unas se adecua más a certificaciones que otras, por ejemplo.
También hay plantillas especiales para la primera certificación, otra para las
siguientes...

Muestra un diálogo estándar para guardar los datos de la hoja


resumen actual como plantilla, en un archivo.

Menú P royecto / 215


Búsqueda de información
Ventana Búsqueda General

Accesible desde la opción Búsqueda general... del menú Proyecto y también desde la
sección Posición actual y modos de la ventana principal. Sirve para seleccionar unos
criterios de búsqueda de forma simplificada, para que el usuario no tenga que recordar
nombres de campos o tablas, ni la sintaxis SQL de los comandos de búsqueda. La lista de
concepto o relaciones resultantes de la búsqueda se muestra en la ventana principal.

Si la ventana se encuentra reducida a 3 campos de entrada, y posiblemente, algunos


botones de Búsquedas programadas, podemos verla con todas sus posibilidades,
pulsando , y volver al estado anterior, pulsando .

La ventana completa contiene los siguientes campos y controles:

Comando de búsqueda
Muestra en cada momento, la cláusula Select que realizará la búsqueda, a medida
que vamos seleccionando los filtros de la misma con los otros controles.

En la siguiente sección se ofrecen varios campos y datos que filtren los conceptos a
buscar:

Tipo y Clase permiten filtrar por uno de los tipos de conceptos o bien, eliminar el filtro,
seleccionando la primera opción (en blanco) de la lista desplegable. Cuando cambiamos
de Tipo, se borran las máscaras tecleadas, en cambio al cambiar de Clase dentro de un
mismo Tipo, no.

En los otros campos se puede teclear una máscara que filtre por Código, Descripción
(Resumen), Fecha y Precio. El Código tienen la peculiaridad, de que por defecto incluye
una máscara por la derecha, es decir, al teclear simplemente "MO" buscará todos los

Ventanas del programa / 216


códigos que comiencen por MO (equivale a MO*), lo mismo sucede en el Descripción,
con máscara por ambos lados (teclear "laboral" supone buscar los Resúmenes que
contengan la palabra, es decir, la máscara *laboral*).

Condiciones de búsqueda

Tenemos botones que son a la vez un rótulo dinámico: al pulsarlo se muestra un


menú con todas las opciones disponibles en función del tipo que tengamos
seleccionado, y al elegir una de las opciones, se rotula en el botón. A esta selección
de un campo de tabla, podemos añadir una condición de cardinalidad en la lista
desplegable que hay a continuación, y el dato a comparar. Por ejemplo: "Texto
>=100" (refiriéndose al número de caracteres). Para eliminar la selección de
cualquiera de los botones, basta con pulsar en él, y en vez de seleccionar una
opción, pinchar fuera del menú.

Ordenaciones del resultado

Opcionalmente podemos seleccionar un campo de la tabla del tipo o tipos


seleccionados, para presentar la lista resultante en un orden determinado. Si no
se selecciona un campo en este menú, la lista aparecerá siempre en orden
ascendente de código. A la derecha de este botón-menú hay una lista desplegable
para seleccionar si el orden presentado deberá ser "Ascendente" o "Descendente".

Búsquedas programadas

Contiene una serie de botones, cada uno con un rótulo explicativo, que permite
mediante un solo clic, realizar cualquier búsqueda con todos los criterios que
hemos visto, para utilizarlas cómodamente.

Hay varios botones predefinidos con varias búsquedas útiles, pero se pueden
definir todas las que se desee, pulsando el botón Editar búsquedas. Esta acción,
abre el archivo de texto panbus.mac del directorio \MACROS, con el Bloc de notas o
el editor asociado en el sistema. Viendo como ejemplo el formato del archivo que
existe, puede definir las búsquedas que quiera y aparecerán dinámicamente los
botones correspondientes.

Efectúa la búsqueda y presenta los resultados en la ventana principal.


En la línea de Posición actual y modos, aparecen el camino \.. indicando que lo que se
muestra en ese momento es resultado de una búsqueda.

Abre un archivo de texto donde podemos editar búsquedas


que se guardarán en los botones libres de la sección de búsquedas programadas

Menú P royecto / 217


Que se convierte en cuando está en formato
Avanzada, permite un formato de ventana acorde al tipo de búsquedas que realicemos.
En el segundo caso sólo se permiten Tipo·Clase, Código, Descripción, Fecha, Precio y los
botones de búsquedas rápidas.

La casilla M antener abierta, cuando esta marcada, evita que al pulsar Acepta se
cierre la ventana para poder realizar cómodamente distintas pruebas.

Ventana Búsqueda por Términos

Accesible desde la opción Búsqueda por términos...; permite realizar búsquedas por
orden alfabético, mediante los términos que tenemos dados de alta en la base de datos y
asociados a los conceptos.

En primer lugar tenemos un campo de edición donde ir tecleando la clave que


buscamos, y según tecleamos se va seleccionando en la lista inferior (ordenada
alfabéticamente) la primera que incluye los caracteres escritos.

Cuando seleccionamos un término de la lista, podemos movernos hacia arriba o abajo


por la lista con las teclas habituales, para buscar otro término cercano.

Arriba a la derecha tenemos el conmutador M antener ventana arriba . Es un


conmutador de posición que nos permite elegir entre tener la ventana de búsqueda
siempre en primer plano o que se mantenga en segundo plano mientras trabajamos con
otras ventanas.

O el doble clic sobre uno, efectúan la búsqueda y presenta los


resultados en la ventana Principal.

Ventanas del programa / 218


Ventana Búsqueda en Lenguaje natural. Tesauro

Accesible desde la opción Búsqueda en Lenguaje natural..., al abrirse la ventana carga


el diccionario especificado en la ventana Opciones, que nos permitirá indizar
automáticamente el archivo de base de datos, realizar consultas en lenguaje natural y
analizar y corregir ortográficamente todos los textos.

La consulta escrita en lenguaje natural en el campo de texto de la ventana, es


convertida en SQL por el programa al pulsar -con la ayuda del diccionario
actual-, presentando en la ventana principal la lista de conceptos que cumplen con la
búsqueda de descriptores. Si no encuentra alguno de los términos buscados, se muestra
el mensaje:

Y se interrumpe la operación. En caso contrario convierte la lista de términos en lista


de descriptores, eliminando los términos sin interés documental y convirtiendo los
sinónimos en descriptores mediante el tesauro, ver Diálogo indiza archivo.

Por ejemplo, imaginemos que nuestra base de datos entra en el contexto de la


construcción, y tenemos un tesauro con términos de ese ámbito profesional:

Al introducir la búsqueda tejados de tejas cerámicas en el campo, y pulsar Acepta, la


palabra tejados se puede haber convertido en cubierta que es su sinónimo documental,
ha desechado la preposición de , la palabra tejas ha sido cambiada por teja y cerámicas por
cerámico es decir, los correspondientes sinónimos documentales. Independientemente
del término que empleemos en la consulta, nos recuperará toda la información
referente a él o cualquiera de sus sinónimos o sinónimos documentales.

De la misma forma, no importa que empleemos términos con géneros o número


distintos de los descriptores con los que se ha indizado la base de datos pues el
diccionario de la construcción nos hará las conversiones necesarias, así como las
mayúsculas y minúsculas, acentos o incluso algunos errores de ortografía. Fíjese en el
cambio cerámicas por cerámico que modifica género, número y añade un acento.

También se podrían añadir condiciones alternativas con la conjunción , por ejemplo:

tejados de tejas cerámicas o placas conformadas.

Menú P royecto / 219


También se admiten máscaras de códigos en los términos a buscar.

Abre el diálogo Indiza archivo.

Abre el diálogo Desindiza archivo.

Abre el diálogo Corrige texto.

Realiza la misma acción que el botón anterior pero en lugar a


limitarse a la ventana de texto seleccionada, corrige recorriendo todos los textos de la
base de datos actual. Muestra un diálogo de progreso que se puede interrumpir, con el
mensaje:

Realiza la consulta con las claves obtenidas en descripciones, textos,


y las opciones estándar del diálogo Indiza que se hayan elegido.

Realiza la búsqueda por todos ellos y además por los términos


obtenidos con opciones especiales (términos manuales, ventana de propiedades y textos
múltiples).

El archivo de tesauro / diccionario se mantiene con el programa externo DIANA al que


puede acceder desde la opción Diana Diccionarios y tesauros

Diálogos para funciones del Tesauro:

Diálogo Indiza archivo


Se accede a este diálogo desde el botón Indiza... de la ventana Tesauro. Permite
decidir qué clase de textos se incluyen como términos del archivo: texto extenso,
texto corto descriptivo, términos de búsqueda automáticos, introducidos
manualmente, etc.

Ventanas del programa / 220


M áscara de conceptos: Permite seleccionar sólo los que queramos, y los
conmutadores de la siguiente sección el modo de indizar:

Eliminar términos no encontrados, se salta los no existentes en el tesauro


utilizado.

Eliminar términos sin clasificar y Eliminar términos vacíos, sirven para


descartar los lemas del tesauro que no queramos que aparezcan (mire la
documentación del programa Diana).

Sustituir sinónimos, consulta las relaciones del tesauro y asigna a todos los
términos que sean sinónimos, la misma clave. Por ejemplo, si entre los
términos indizados aparecen “casa”, “vivienda”, “chalet” y “piso” y en nuestro
tesauro todos fueran sinónimos de “vivienda”, en la indización sólo aparecería
ese término.

Los diacríticos (acentos) de los términos y las mayúsculas, en general, no se


tienen en cuenta. Se considera la misma palabra con o sin acento.

La siguiente sección selecciona los textos de los que se van a extraer los términos:
resúmenes (texto descriptivo abreviado de cada concepto), descripciones (textos
extensos en formato ASCII), tipos (incluir los nombres de cada tipo como términos),
clasificaciones (todos los rótulos relacionados con cada concepto), textos (textos
múltiples en formato RTF, y SÓLO se incluyen para las búsquedas extendidas) y
propiedades (también exclusiva para búsquedas extendidas e incluye todos los textos
de todos los campos de la ventana de propiedades de cada concepto).

IM PORTANTE: Esta última opción puede aumentar muchísimo el número de


términos y el tiempo en generarlos. Considera además, que en las búsquedas
extendidas se incluyen todas las claves asignadas manualmente, y no a través de
este diálogo.

Comienza la generación de índices de acuerdo con los


conmutadores seleccionados.

Diálogo Desindiza archivo

Se accede a este diálogo desde de la ventana y permite eliminar


del archivo de base de datos los índices y todos los términos de tipo automático de un

Menú P royecto / 221


archivo. Presenta el rótulo:

Que en este caso es el defecto, cierra el diálogo sin realizar


ninguna acción.

y confirman la desindización. Mientras se realiza


la desindización se presenta un diálogo de trabajo, que permite la interrupción.

Diálogo Corrige texto

Al pulsar cambia la forma del cursor a la de una flecha con


interrogante para indicarnos que pinchemos cualquier ventana o campo de texto y
busca términos incorrectos o que no existan en el diccionario, cada uno que
encuentre los seleccionará en su ventana original correspondiente, para visualizar
fácilmente el contexto, y despliega un diálogo con el rótulo:

y nos muestra en el campo editable el <término sugerido>

el diálogo nos permite:

Modificar el término sugerido, por si no fuese el deseado, o que no se


encuentre en el diccionario.

Con , modificar la información del concepto seleccionado, cambiando


un término por el otro.

Con , ponerlo en el diccionario. Esto es un acceso rápido a la


modificación del tesauro sin tener que ir a la ventana de Utilidades y pulsar
DIANA... Se muestra el diálogo Alta término.

Ignorar la corrección del término, pulsando , siguiendo con la

Ventanas del programa / 222


búsqueda

Cancelar la operación con

Diálogo Alta término diccionario


El diálogo permite dar de alta nuevos términos en el diccionario general y
clasificarlos, presenta el rótulo:

En el campo de entrada se teclean el Término, el Tipo ( puede ser D(escriptor) S


(inónimo) A(breviatura) E(rror), y si no se especifica ninguna queda como vacío), y
opcionalmente el Sinónimo( lema sinónimo del primero, para los tipos S, A y E). El
término deberá ser escrito como iría escrito en medio de una frase, es decir con la
primera letra en minúscula los nombres propios, sin mayúsculas o todo mayúsculas
según sea nombre, abreviatura...

Da de alta el término definido en el tesauro.

No da el término de alta, cierra el diálogo y continúa con la corrección


ortográfica si quedan términos por corregir.

Otras formas: Panel de Búsqueda en árbol

Panel de búsqueda en árbol


Accesible desde el menu Proyecto en la opción Ventana de navegación en árbol..., o
bien arrastrando el control separador vertical de la lista de conceptos de la ventanas
principal . La primera opción nos abre una ventana nueva con el árbol del
presupuesto.

Menú P royecto / 223


El separador redimensionable permite repartir el espacio central entre la lista de
conceptos y el árbol jerárquico. Presenta la estructura del archivo en forma de árbol,
donde podemos abrir y cerrar ramas de forma idéntica a como lo hace el Explorador de
Windows, y manteniendo el mismo aspecto.

Cada vez que nos posicionamos sobre cualquier tipo de concepto, la ventana principal
se sincroniza con ese de concepto, de forma que podemos movernos por toda la base
de datos, de forma jerárquica visualmente.

Los conceptos de Tipo Carpeta que son de Clase Búsqueda, no muestran en el árbol la
descomposición de esa búsqueda, ya que esos conceptos no están realmente colgados
de la carpeta.

Ventanas del programa / 224


Otras formas: Búsquedas QBE

Las ventanas de propiedades muestran todos los datos e información que puede
asociarse a un concepto por su Tipo. Cada tipo de concepto tiene una ventana de
propiedades (con una o varias pestañas), y contiene la información única relacionada
con ese tipo y ningún otro. Por ejemplo, un gráfico o un texto puede estar asociado a
cualquier concepto de una base de datos, pero un tipo de cabecera, sólo puede estar
relacionado con un concepto de tipo Carpeta.

IM PORTANTE: Los Tipos de conceptos, tienen 2 formas de aparecer en las ventanas de


propiedades: los que en la ventana Tipos muestran la opción de desplegarse, es que
conforman un Tipo con varias Clases (esto quiere decir, que para ese Tipo hay una sola
ventana de propiedades, pero cada Clase puede añadir o quitar campos o pestañas); los
que no tienen Clases, son un tipo con una ventana de propiedades que no cambia.

Entonces, en todas las ventanas de propiedades de Tipos que tengan varias Clases,
tendrán como elemento común, en la primera pestaña, la lista desplegable Clase de
<tipo>, con todos los posibles para ese Tipo.

TODAS las ventanas de propiedades de todos los tipos tienen en común los siguientes
controles e información:

Primera sección
Puede aparecer la información del concepto actualmente seleccionado en la ventana
principal: su icono (Tipo), Código y Resumen (descripción). Por interés general, si el
concepto es de tipo Elemento, aparece la Unidad, y si es de tipo documento, la Fecha,
porque son datos fundamentales.

Si no tenemos seleccionado un concepto del tipo correspondiente a la ventana de


propiedades, no se muestra ningún dato.

Arriba a la izquierda se muestra el icono correspondiente al concepto seleccionado.


Los datos que se muestran son los del concepto actual de la ventana principal. Estos
datos no cambian cuando vamos seleccionando otros conceptos en la ventana
principal.

A la derecha tenemos el botón Seguimiento que despliega una lista con las
distintas marcas aplicables al concepto para su seguimiento.

Si el concepto tiene gráficos asociados también tendremos el botón Gráficos que


abre la Ventana Gráficos.

Si pulsamos sobre el icono del concepto nos aparece un menu contextual desde el
que podemos acceder a una serie de ventanas de trabajo del menú concepto, como
son: Ventana Textos..., Ventana Valores..., Ventana Términos..., Ventana Gráficos...
y Ventana Paramétricos...; o bien cambiar el icono de la ventana de propiedades en la
que nos encontramos actualmente. Recordamos que el cambio de icono no implica
cambio de propiedades del concepto.

Menú P royecto / 225


Búsquedas QBE
"Query By Example", significa "búsqueda mediante un ejemplo" de lo que queremos
encontrar.

El conmutador Modo Búsqueda que hay a la derecha de la misma primera sección,


activa el modo. Es la máxima expresión en potencia y facilidad de búsqueda dentro de
la base de datos. Permite convertir todas las pestañas de las ventanas de propiedades
en un formulario para realizar búsquedas por múltiples criterios. Este modo funciona
aún sin estar en modo Edición.

Al activar el conmutador, todos los campos de la ventana se ponen en blanco y la


ventana se independiza (desincroniza) del concepto actualmente seleccionado en
ventana principal, mostrando en la cabecera el rótulo: "Búsqueda en propiedades (F1
o F2)".

IM PORTANTE: Si activamos este conmutador manteniendo pulsada la tecla


CONTROL, el título cambia a “MODO: Códigos de campo” y en cada campo se muestra
el nombre que tiene en la base de datos —con el formato habitual nombre_tabla.
nombre_campo—, o el dato al que hace referencia. Esto es útil para realizar informes,
búsquedas avanzadas...

Ventanas del programa / 226


Admite términos en cualquiera de los campos, así como máscaras que permitan
términos parciales, y podemos buscar por todos los campos que queramos en
múltiples pestañas. Pulsando cualquiera de los 2 botones Acepta (que en el modo
normal son Siguiente y Anterior), aparece el resultado de la búsqueda en la ventana
principal.

Para buscar por el Código y Descripción de las líneas que aparezcan en pestañas con
listas de elementos en vez de campos, al activar este modo aparece una pestaña
Búsquedas, con todos los campos por los que se puede buscar.
IM PORTANTE: Si queremos pasar la búsqueda que hemos realizado a una carpeta de
búsqueda para tenerla accesible continuamente, podemos copiar la sentencia SQL
que se realiza teniendo abierta la ventana Propiedades de carpetas, que al no estar
sincronizada con un objeto de tipo carpeta, presenta en este caso la sentencia del
concepto .. (un "concepto" virtual que representa la última búsqueda realizada).

Bloqueo de conceptos
Cuando tenemos activado el sistema de bloqueo de edición de conceptos en la
ventana Parámetros generales, se muestra un botón en la parte derecha de todas
las ventana de propiedades. Si lo pulsamos, el concepto queda bloqueado contra
edición incluso para el usuario actual, y el icono del botón cambia. Sólo un usuario
con permisos de administrados puede desbloquear estos conceptos bloqueados.

Colores en los rótulos de las pestañas


Las pestañas que componen distintos grupos de información dentro de cualquier
ventana de propiedades, tienen un código de colores:

Negro.- pestaña que contiene datos propios del concepto (a los que se accede
además de en la ventana principal, en campos de edición de esta ventana de
propiedades, por comodidad), y datos únicos particulares de este tipo de propiedad.

Verde.- pestaña que permite visualizar datos de relaciones con otros conceptos, los
datos anexos a esa relación, normalmente se introducen en las ventanas de
propiedades de los otros objetos.

Rojo.- pestaña que incluye datos calculados (es decir, algunos no existen grabados

Menú P royecto / 227


en la base de datos) Estos cálculos se realizan en el momento de entrar en la
pestaña, con los datos que hay en la base en ese momento, por ejemplo, la
valoración de unos precios en función de las cantidades en stock, el precio al que
se compraron, la fecha, etc.

Azul.- pestaña con datos que pueden ser calculados (rojo) o no, pero que no están
relacionados directamente con el concepto actualmente seleccionado en la
ventana de propiedades, sino que representa datos para el Tipo actual de concepto,
pero en TODO el proyecto.

Subpestañas Descripción, Observaciones y Concepto


En la primera pestaña de cualquier ventana de propiedades, siempre hay un par de
subpestañas con datos básicos, que pueden tener otras con datos más importantes o
de uso más frecuente delante: normalmente son las dos últimas subpestañas.

La de Descripción es el mismo texto extenso sin clasificación de la ventana Textos.


El texto multilínea de Observaciones es un campo de la propia tabla de propiedades,
para tener uno por concepto, pero independiente del texto general. Esta pestaña no
aparece siempre.

En la de Concepto, se muestran los mismos campos que en ventana principal, para


tenerlos más accesibles, con los datos de propiedad del concepto: Clase, Resumen,
Código y el primer gráfico asociado (si es que lo tiene), que suele servir para
identificar al concepto.

Campos y Botones de Referencias a conceptos y clasificaciones


Algunas ventanas de propiedades (no todas), tienen campos con un botón a la
derecha. Esos campos hacen referencia a otros datos de otras ventanas de
propiedades o de la base de datos. Las referencias pueden ser de varias clases:

El formato de estos campos de referencias depende del modo elegido en la ventana


Opciones.

1. Los que tienen una marca de color amarillo, con el rótulo Clasificación por <rot>,
hacen referencia a valores que hay en los tipos de la ventana Clasificaciones.
Al pulsar el botón, se abre la ventana que muestra el rótulo: clasificación (Tipo)
código, y la lista de Códigos y Descripciones para ese campo, es decir, todos los
rótulos almacenados en la base de datos, para ese tipo.

Al teclear datos en estos campos, dependiendo del formato de referencias,


funciona de las siguientes maneras:

a. Si el campo es de formato Código · Resumen (aunque por alguna opción de


visualización no se muestre el Código), al teclear un texto, se buscará según el
formato de referencias seleccionado. Tanto para introducir (buscar) una
clasificación existente, como para darla de alta si no existe, podemos forzar el
formato poniendo detrás o delante el punto separador (·). Por ejemplo, al teclear
en un campo "m" si tenemos seleccionado Defecto descripción, nos mostrará
todos los posibles rótulos para ese campo que contengan la letra 'm'. En cambio,
al teclear "m·" buscará siempre en Códigos y tecleando "·m" siempre en
Descripciones.

Ventanas del programa / 228


b. Si Código y Resumen están en campos separados, cada uno admitirá la
búsqueda sólo en su campo, y al teclear Códigos o Resúmenes inexistentes, se
propondrán como nuevos respectivamente.

2. Los que tienen una marca de color azul, hacen referencia a otros conceptos de
la base de datos de otros Tipos distintos al actual. Al pulsar el botón se abre la
ventana de propiedades de ese Tipo, con el concepto al que hace referencia el
campo.

Por ejemplo, un campo "Entidad" mostraría la ventana de propiedades de Entidades


con los datos de la actual. También hay campos de este tipo que no se componen
de un par Código · Resumen, y admiten múltiples valores separados por punto y
coma (;)

3. Un caso poco frecuente es una referencia a un archivo externo a la base de datos


(marca de color verde: ), en este caso, el botón muestra un diálogo estándar de
abrir archivo para seleccionar uno.

Campos de entrada de texto


Las ventanas de propiedades tienen unos cuantos campos de texto, que representan
datos de otras ventanas o campos, pero que por comodidad de acceso o restricción de
permisos, es más conveniente que se encuentran juntos en la ventana de datos. Los
comunes a todas las propiedades son Código y Resumen, que son los propios del
concepto en la ventana principal, y el campo Descripción que corresponde con el texto
de la ventana Texto. En cualquiera de los dos lugares en que aparecen estos datos,
pueden modificarse.

Tecleando datos
Existen ayudas especiales para la introducción de datos. Siempre entre conceptos del
mismo tipo:

1. Se pueden tomar como plantilla los datos de propiedades de otro concepto del
mismo archivo u otro, para copiar campos en varios conceptos del mismo tipo. La
copia se realiza en el campo correspondiente, poniendo una coma (,) como si se
tratara de la ayuda en campos que se explica en Uso del teclado.

2. Se pueden reproducir campos en una multiselección de conceptos (copiar a todos),


poniendo el cursor en el campo que deseamos copiar, y seleccionando en la
ventana principal todos los conceptos que queramos que tengan ese valor en ese
campo. Al pulsar el botón Repite, que sólo se muestra activado cuando en la
ventana principal hay seleccionado más de un concepto, se realiza la copia del
dato seleccionado.

3. Una posibilidad muy útil es pulsar la tecla F9 en un campo de referencia a una


tabla de Clasificaciones (botón ). Se muestra la ventana Clasificaciones, abierta
en la pestaña Actual, con la lista de posibles valores para ese campo. tecleando
una máscara de búsqueda SQL en el campo de edición Código o Resumen (ya que
la ventana no pierde el foco), introducimos el deseado.

Cabeceras de lista
Por encima de la cabecera de una lista en cualquier pestaña o panel, puede aparecer

Menú P royecto / 229


un pequeño botón con marca azul, Lista a ventana principal, que realiza la misma
función que una búsqueda, ya que nos muestra en ventana principal los datos de la
lista.

Cuando una ventana de propiedades (e incluso ventanas de datos que no son de


propiedades) tiene alguna lista de elementos, conceptos, valores... con botones de
cabecera que muestran un asterisco, se está indicando que no se trata de un rótulo
alfanumérico libre o un valor numérico, sino una referencia bien a un concepto, o
bien a un rótulo de clasificaciones. La ventaja de estas columnas de campos, es que
en general, al hacer doble clic sobre la línea, abrimos la ventana de propiedades del
concepto al que se hace referencia, pero además, esta columna es sensible A SU
PROPIA referencia.

Por ejemplo, en la pestaña Descomposición (relaciones inferiores) de la ventana


propiedades de Varios. El campo Concepto con una máscara únicamente puede
mostrar una lista de conceptos y además no se admite teclear otro Código o Resumen
que no sea el de un concepto. PERO además, haciendo doble clic en cualquier línea
en esa columna, se abre la ventana de propiedades del concepto correspondiente.

A la derecha de cualquier barra de botones de cabecera de lista, tenemos un pequeño


icono de Ms-Excel con el texto Lista a Excel, que tiene el uso explicado en el tema de
controles habituales.

Barra de botones al pie


/ En una ventana que no sea la principal,
tienen el efecto de recorrer hacia delante y atrás, las múltiples fichas o elementos
del mismo tipo, cuyo contenido se muestra en esa ventana.

Permite asignar los mismos campos de propiedades (todo el


contenido de la ventana) a múltiples conceptos a la vez, tecleando los datos una sola.
Muy cómodo para crear conceptos con datos similares.

Funciona multiseleccionando en ventana principal los conceptos que deseemos y


pulsando el botón

Permite crear desde la propia ventana, conceptos nuevos del


mismo tipo que tenemos en la ventana propiedades, mediante el diálogo Nuevo. El
nuevo concepto se incorpora en la base de datos en el lugar que tenga
predeterminado en la columna Proyecto > Tipos de conceptos > Caminos conceptos
nuevos. Cuando este campo está en blanco para el tipo actual, queda suelto o
descolgado en la base de datos, pero sus propiedades son igualmente, las que se
muestran en esta ventana.

Muestra el diálogo Selección de informes, con una configuración


similar a la ventana Imprime, pero simplificada para utilizar informes contextuales
sólo a la ventana desde la que se lanza.

IM PORTANTE: En cuestión de informes, cuando la ventana de propiedades y el


concepto actual de la ventana principal están desincronizadas, a los informes se les
pasan 3 variables: actual (identificador del concepto en la ventana de propiedades),
título (rótulo con el Tipo·Clase de ese concepto) y subtítulo (el resumen de ese

Ventanas del programa / 230


concepto). En ese caso, bas.actual es el identificador del concepto de la ventana
principal. Lanzando los informes desde la ventana de informes y procedimientos, las
tres variables tienen el valor "undefined" y debemos tratarlas en consecuencia, si
estamos programando informes.

Otras formas: Búsquedas por Tipo y Clase

Se accede a esta ventana desde la opción Tipos de conceptos...; se trata de una


ventana visualización de datos de una de las tablas auxiliares (internas) del programa,
la que define TODOS los tipos de conceptos que puede haber en la base de datos.

El control de la lista es un árbol desplegable con sólo 2 niveles, en el cual, el primer


nivel son los Tipos de conceptos del programa, cada uno lleva asociado una ventana de
propiedades que puede variar un poco en los datos, según estemos mostrando cada una
de la Clases que se muestran en el segundo nivel, dentro de cada Tipo. La Clase indica
que se trata de conceptos con unas características y finalidad muy similares a las otras
Clases de su mismo Tipo, pero con algunos datos, campos y relaciones diferentes.

El doble clic en cualquiera de las líneas, sirve como medio de búsqueda rápida de todos
los conceptos de la base de datos con ese tipo, que se muestran en la ventana principal.
Si hacemos doble clic en una de las líneas de los niveles inferiores, sucederá lo mismo,
pero buscando por esa Clase.

En cada línea de información vemos el icono y nombre (Descripción) de cada Tipo o


Clase, un código numérico único (TyC), y el nombre interno único de la tabla donde se
almacenan los datos para el tipo (Tab). Por último, una columna con el número de
conceptos que existen actualmente en la base de cada Tipo y Clase (Uso). El dato de
cada línea de Tipo indica el total incluyendo todas las Clases, pero no es sólo la suma,
ya que además incluye los conceptos que son de tipo genérico, es decir, los que no
tienen ninguna Clase particular. Como el dato de uso puede ser costoso de recalcular y
no se hace en tiempo real, basta pinchar en el botón de cabecera para ver los datos
actuales, si hemos creado o borrado o cambiado de tipo conceptos, o bien cambiado de
archivo.

De la lista, los más comunes y de propósito general son:

Capítulo: Pueden representar una estructura organizativa de capítulos y subcapítulos


(al estilo de los directorios de un disco duro en Windows) o tener entre sus propiedades
una cláusula SQL que permite realizar una búsqueda. Sus "hijos virtuales" serán en
cada caso, los conceptos y/o relaciones resultado de la búsqueda. Hay también otros
tipos especiales que realizan cálculos o funciones especiales.

Elemento (concepto genérico o tipo 'varios'): Pueden representar cualquier concepto


que no requiera de unas propiedades, características o datos especiales

Referencia : Sirve para tener una especie de "acceso directo" a un archivo externo de
CUALQUIER clase, no para ejecutarlo desde el programa, sino para poder ver una vista
previa y acceder de forma rápida a él. Es útil para imágenes, documentos de texto,
documentos HTML, vídeos, etc.

Menú P royecto / 231


Entidad: Permite almacenar todos los datos útiles de una entidad personal o
empresarial de cualquier Clase: persona, empresa, cliente, proveedor, organismo,
intermediario, etc.

Recurso: Se definen distintas clases de recursos que pueden formar parte de un


elemento, unidad de obra o auxiliar. Se presentan las siguientes clases de recursos:
mano de obra, maquinaria, materiales, medios auxiliares y subcontratas.

Documento: La misma ventana de propiedades mantienen datos particulares para


documentos de COMPRA: almacenar solicitudes, ofertas, pedidos, albaranes de
recepción, facturas, partes, movimientos, etc.

Hay otros muchos Tipos y Clases, pero son más particulares y se explican en otras
secciones de la ayuda.

Muestra en la pantalla principal todos los conceptos con el tipo


seleccionado, puede ser útil para búsquedas rápidas, ya que los conceptos del mismo
tipo pueden llevar distintos iconos en la ventana principal. El doble clic con el ratón
sobre las líneas de la lista, tiene el mismo efecto.

Se utiliza para cambiar el icono que representa cualquiera de los


tipos, por otro distinto mediante el diálogo Selección de icono ya que un campo como
éste no tiene un campo de edición al pie de la lista.

Permite crear conceptos nuevos también desde aquí, mostrando el


diálogo nuevo concepto, con todas sus posibilidades.

Restaura los iconos originales asociados a cada tipo, almacenados en


el programa.

Permite multiseleccionar varios conceptos en la ventana principal y


cambiarlos todos al Tipo o Clase seleccionados. Muy útil para cambiar el tipo a distintos
grupos de conceptos de forma rápida.

Otras formas: Búsquedas por Clasificaciones

Se trata de una ventana de mantenimiento de una tabla básica del programa, que
consiste en subconjuntos de propiedades que se pueden asociar, al igual que Textos o
Gráficos.

Pestaña Actual:
La ventana muestra en la primera sección el tipo actual de clasificación que hemos
seleccionado en la pestaña Todas. Bajo ella se muestran el Tipo, Código, Descripción
y opcionalmente Usos, de cada uno de los elementos de ese tipo.

Ventanas del programa / 232


Tipo: Es un icono asociado que únicamente sirve para distinguir mejor los valores en
esta ventana, se puede cambiar en cada línea haciendo doble clic sobre el icono, con
lo que se muestra el diálogo de selección de iconos.

Usos: Como en otras ventanas, se refiere al número de conceptos que están


relacionados con esa clasificación, pero sólo se cuentan en las clasificaciones
relacionadas con campos de ventanas de propiedades, si son clasificaciones para uso
interno como el Tipo de archivo, Unidad de medida..., no se contabilizan.

Pestaña Todas:
Muestra una lista de pares Tipo ó Ide · Campo (Descripción), que suponen todos los
tipos de clasificaciones que existen en la base de datos actualmente abierta.
Haciendo doble clic en cualquiera de los tipos, se abre la pestaña Actual, con esa
clasificación.

Veamos, por ejemplo, un par de los tipos definidos, y sus posibles valores.
Seleccionando cada uno, podríamos ver una serie de valores como los que tenemos
debajo:

10 RELACIÓN CONCEPTO-TEXTO. SECCIÓN DE TEXTO

01 Condiciones

02 Comentarios

03 Observaciones

04 Notas personales

Menú P royecto / 233


...

33 ENTIDAD. PROVINCIA

28 Madrid

08 Barcelona

15 A Coruña

...

Se pueden dar dos casos:

1. Clasificaciones que se utilizan en más de un campo de propiedades (incluso de


distintos tipos de conceptos, como por ejemplo, las localidades y las provincias). En
este caso, el Ide de la clasificación es el mismo, pero en Tabla, se puede ver dónde
se utiliza.

2. Clasificaciones muy particulares que sólo se utilizan en un tipo de conceptos. En


este caso los identificadores de clasificaciones relacionadas con el mismo Tipo,
llevan un subconjunto de numeración como: 9.1, 9.2, 9.3...

Botones al pie
En la pestaña Todas están desactivados porque son herramientas para las listas de
elementos de las clasificaciones.

Que es equivalente al doble clic con el ratón sobre las líneas de la


lista, muestra en pantalla principal todos los conceptos que tengan relacionada la
clasificación seleccionada. Puede ser útil como método de búsqueda, ya que las
relaciones con las clasificaciones pueden estar en múltiples pestañas y lugares de
las ventanas de propiedades. Si mantenemos pulsada la tecla CONTROL, la búsqueda
que realiza es la de conceptos sin asociar a la clasificación seleccionada y los
muestra en la ventana principal.

Cuando tenemos seleccionada una línea, muestra el diálogo


Selección de iconos, para asociar uno en particular. Esto tiene utilidad cuando en las
ventanas de propiedades, se muestran listas de elementos clasificados, ya que allí se
muestran con sus iconos, y puede servir para distinguir mejor los diversos valores.

Permite mediante la multiselección de DOS líneas, cambiar todas


las referencias a los rótulos seleccionados en primer lugar, por el rótulo seleccionado
en último lugar. Esta operación sirve principalmente para mantener y limpiar la lista
de rótulos cuando se teclean y se dan de alta desde los campos rótulos que deberían
ser iguales, escritos de distinta forma, o bien cuando se hace una importación
masiva de datos y sucede lo mismo.

Para confirmar se muestra un diálogo de confirmación del tipo:

Ventanas del programa / 234


Permite multiseleccionar varios conceptos en la ventana principal
y cambiar todos los que contengan referencias al tipo de rótulo que tenemos en la
ventana, por el rótulo seleccionado (sólo uno).

Presenta únicamente rótulos utilizados: Permite ocultar todos los valores de


rótulos que están dados de alta para ser utilizados, pero que no están
relacionados con ningún concepto.

Busca conceptos sin clasificar: Realiza una búsqueda de todos los conceptos que
no utilizan la clasificación actual (no el valor seleccionado, sino cualquiera de
ellos, por eso se puede utilizar también en la pestaña Todas), y lleva los conceptos
encontrados a la ventana principal.

Ventana Características
Se accede a esta ventana desde la opción Características... Se trata de una ventana
para el mantenimiento y personalización de un archivo de datos que afecta a la
visualización de cualquier base de datos. Las modificaciones que hagamos se guardan
en el archivo gescar.mac del subdirectorio \MACROS. Este es un pequeño archivo de
texto plano, que contiene los iconos de características que aparecen en la columna Info
de la ventana principal (esta ventana también es accesible desde el botón de cabecera
de esa columna).

Las características simbolizan con iconos la información que tienen asociada los
conceptos (la que no es implícita por su Tipo), aunque todas las características descritas
no tienen porque poder tenerlas todos los Tipos. El programa se distribuye con unas
cuantas características bastante útiles y habituales (identificando los conceptos que
tienen descendientes, imágenes, términos, textos, mediciones...), pero podemos definir
las que necesitemos.

Menú P royecto / 235


Descripción: Sólo sirve como comentario dentro de esta ventana. Los campos Icono y
Tipo se corresponden con los botones Icono y Tipo, que abren los diálogos Selección de
iconos y Selección de tipos, respectivamente. El doble clic sobre cualquiera de las líneas
de características, produce el mismo efecto que el botón Icono.

Búsqueda: Es el más importante y define la condición automática mediante la cual el


programa pondrá los iconos a los conceptos. La comprobación para cada línea de
conceptos, tiene el formato: <tabla>.<campo>.<condición>

<tabla> y <campo> son cualquiera de los que componen la base de datos.

<condición> puede ser:

Existe: Que es sobre todo para relaciones entre tablas y comprueba que el
concepto para el que se examina la condición, esté referenciado en el campo de
la tabla que se menciona

Existe1: Realiza la misma comprobación pero sólo se verifica cuando hay 1 sólo
valor (por ejemplo rcc.des.existe1, comprueba que el concepto solamente esté
en la descomposición de UNA relación)

Existe2: Análogo a la anterior, pero obligatoriamente con una cardinalidad


MAYOR que uno (2 ó más)

Con dato: Que comprueba si existiendo el campo, no está ni en blanco, ni a


cero, es decir que tiene algún contenido.

Antes de comprobar esta condición, en cada característica se hace un filtro por Tipos, de
modo que si no tiene ninguno (Tipo en blanco), se comprueba la condición sobre todos
los conceptos de la base de datos (lo que puede ser más lento si hay decenas de miles),
pero si tiene un Tipo definido, sólo se comprueba sobre los conceptos de ese Tipo.

IM PORTANTE: Atención a ciertas particularidades de funcionamiento, como por


ejemplo, que la búsqueda tex.con.existe, no busca en el texto de defecto, sino en las
secciones de textos.

Ventanas del programa / 236


Menú Herramientas
Menú Herramientas
Este menú desplegable da acceso a una serie de ventanas que nos permiten manejar
tareas avanzadas sobre la base de datos actual y la aplicación en general: gestionar
permisos de los usuarios, definir el tipo de información a trasladar mediante los botones
Traslada, importar y exportar datos, reparar archivos, etc.

Vea en esta otra sección más opciones destacadas de este menú.

Ventana Central de proyectos: Abre un panel para gestión de archivos externos de


obra, B.D. de construcción, gráficos, documentos... que además permite realizar
comparativos de precios, mediciones y otros, a través de los informes asociados a la
ventana.

Ventana Conexión ERP: Permite gestionar la conexión con sistemas de


planificación de Gestión comercial y recursos humanos y materiales como Sigrid de
Professional Software. La conexión es programable a través de JavaScript si fuera

Menú Herramientas / 237


necesario personalizarla.

Repara base de datos...: muestra un diálogo de progreso y chequea todo el archivo


en busca de inconsistencias en la relación de la información o fallos en la
estructura del archivo y los reparan en la medida de lo posible (con un porcentaje de
éxito muy alto).

Al seleccionar la opción del menú, se nos muestra un diálogo de progreso que da


información sobre qué parte de la información del archivo se está reparando.

Compacta base de datos...: Comprime los datos del archivo, eliminando huecos y
reduciendo el tamaño final cuando ha habido muchas altas y bajas de información.
También se utiliza cuando por algún motivo de corrupción de archivo (causado por
un apagón, virus, etc.) ni siquiera la opción Repara base de datos... puede arreglar
los desperfectos.

PARA ADMINISTRADORES: Tanto para reparar archivos, como para compactarlos, hay
una herramienta especial, que es mantener pulsadas las teclas
MAYÚSCULAS+CONTROL al seleccionar la opción de menú. En este caso, se
chequean o reparan todos los archivos del directorio al que pertenece el archivo que
tenemos abierto, evitándonos tener que abrirlos de uno en uno.

M odo exclusivo: Permite poner en ese modo el archivo abierto actualmente y lo


suelen utilizar los administradores del sistema cuando necesitan asegurarse de que
ningún otro usuario esté conectado al archivo.

El bloqueo de modificación del archivo por parte de otros usuarios, incluye al propio
usuario si tiene abierto en la ventana paralela simultáneamente el mismo archivo.
Este bloqueo también se produce cuando tenemos la ventana de "Gestión de
permisos" abierta, ya que su uso implica la apertura de otra instancia de la base de
datos, como si estuviese utilizada por otro usuario.

Cuando se tiene abierto un archivo en edición en dos sitios a la vez, no es posible


que uno de ellos ponga el modo exclusivo. Asimismo, si alguien tiene puesto en uso
exclusivo un archivo, a otro usuario le será imposible modificarlo, aunque sí podrá
abrirlo.

M odo calculado: Esta herramienta nos proporciona el presupuesto actualizado en


todo momento. Cada vez que realicemos un cambio en cualquiera de los factores que
afectan al precio de una partida o presupuesto, éste se refleja automáticamente
recalculándose dicho presupuesto.

Recalcular totales: Esta herramienta busca cualquier tipo de error relacionado con
el cálculo del presupuesto.

Organización automática: Nos permite montar automáticamente la estructura de


capítulos o estructura jerárquica de organización de archivos. La organización
automática es útil para realizar obras utilizando una parte de la organización de
capítulos de las base de datos, o para leer información no estructurada, como por
ejemplo, una base de datos sin estructura de capítulos montada (una lista de
conceptos).

Ventanas del programa / 238


Menú Exporta
Exporta FIEBDC-3...: Permite intercambiar datos con otras aplicaciones de
mediciones y presupuestos de la construcción. Esta especificación tiene
importancia a nivel nacional, se revisa cada año y agrupa prácticamente a
todas las empresas que crean software para la construcción. Encontrará un
historial de las especificaciones completas de varios años en el Anexo FIEBDC.

Exporta a BCZ...: Este formato ha sido creado para solucionar el problema de la


exportación de ficheros BC3 con imágenes. Hasta ahora la generación de un
archivo en formato BC3 procedentes de un archivo .men con imágenes
incrustadas se realizaba generando por un lado el fichero BC3 y por el otro las
imágenes sueltas. El fichero en formato BCZ incluye tanto el BC3 como las
posibles imágenes incrustadas del archivo original.

Exporta AUTOARQ (Asuni): Vuelca el contenido de partidas del archivo actual a


formato .BC3. El procedimiento de conexión está en Conexión AutoARQ.

Exporta EXCEL (M icrosoft): Crea una hoja Excel mediante el


procedimiento \Comparativos (Central de proyectos)\ Proyecto actual y
paralelo... (cenxls1.xjs), guardando todos los capítulos y partidas del archivo con
su presupuesto, y un gráfico de barras por partidas.

Exporta BAS (según tipo de archivo y fase): Permite grabar archivos de coste y
venta en formato BAS mediante un sistema de conexión programado.

Exporta M s-Project 2000/2002: Conecta con ese planificador, enviándole los


datos del proyecto con algunas variables (como cálculo de la duración: optimista-
medio-pesimista, y otros), especificadas en los parámetros del procedimiento
JavaScript \Colecciones especiales\ Menús y controladores\ Menú
exportaciones\ Conexión Project (expprj1.xjs)

Las 3 opciones de exportación a web (pueden ser más en alguna versión


especial, ya que como las opciones superiores, están controladas por
procedimientos JavaScript y es muy fácil añadir o cambiarlas...), permiten
exportar a una página HTML los datos del archivo. Presupuesto contiene un
presupuesto simple con cantidades, precios e importes, y un índice de
marcadores a los capítulos. Petición de oferta de obra crea una página

Menú Importa

Importa FIEBDC-3...: Permite leer datos en formato estándar de la construcción


FIEBDC-3. Para ver la especificación del formato en vigor, y cómo se introduce
en la archivo Menfis, vea el Anexo FIEBDC.

Importa BCZ...: Crea una carpeta en cuyo interior se genera un archivo en formato .men y se
ubican las imágenes contenidas en el fichero BCZ.

Importa FIE-1.01...: Se soporta por compatibilidad con programas antiguos,


aunque está obsoleto. Convierta a formato FIEBDC-3 estándar los archivos y
luego los importar sobre el archivo actual, .

Importa EPRE (Ayuntamiento de M adrid)...: Trabaja con archivos antiguos del

Menú Herramientas / 239


Ayuntamiento de Madrid en formato .DSC

Importa M YDAS-ASCII (Phecor)...: Trabaja con archivos en formato MYDAS-4,


permitiendo seleccionar del directorio actual de trabajo los archivos con nombre
unitasci.* y descasci.*, para seleccionar los deseados.

Importa mediciones AllPlan FT v16 (XCA)...: Lee archivos de mediciones en


formato .XCA

Importa AUTOARQ (Asuni): Mediante el procedimiento de Conexión AutoARQ,


importa mediciones desde un archivo exportado desde el programa de CAD
AutoARQ, incorporándolas al archivo de proyecto u obra actual.

Importa BAS: Permite leer archivos de coste y venta en formato BAS mediante
un sistema de conexión programado.

Importa Ofertas recibidas por e-mail o por archivo

Importa Términos de Seg. y Salud (Ventana Términos): Nos permite importar


todos los términos relacionados con seguridad y salud que tengamos en un
archivo Excel.

Enviar por correo electrónico: Nos permite elegir entre diferentes formatos de
exportación con los que enviar una solicitud de oferta. Una vez elegido el formato
Menfis generará dicho fichero y lo incluirá en un correo electrónico dentro de
nuestra aplicación de correo predeterminada, donde sólo tendremos que incluir la
dirección del destinatario. Podemos establecer una dirección diferente a la del envío
para las respuestas a estas solicitudes, desde las opciones del menú herramientas.

Personalizar barra de herramientas...: Nos permite configurar los botones que


aparecen en la barra de herramientas o iconos de la ventana principal. Los iconos
no se pueden cambiar, sólo se puede hacer que aparezcan o no en distintos grupos
delimitados por unos separadores verticales, y se pueden cambiar de orden.

Configurar M odos traslada...: Permite activar o desactivar cada modo de trasladar


las distintas unidades de información. Estos modos afectan a la información que se
traslada mediante los botones Traslada de las ventanas, al copiar, y al arrastrar y
soltar.

Utilidades...: Muestra botones que dan acceso a unas utilidades externas al


programa principal, con el mismo nombre que el indicado en los botones y varias
utilidades para el manejo de archivos.

Opciones...: Se utiliza para configurar distintos parámetros del programa, y para


instalar, y desinstalar los permisos. También nos informa del nombre de los
directorios de trabajo y permite registrar el programa en el Registro de Windows (por
ejemplo, si tuviésemos dos versiones de este mismo programa, sólo una de ellas
podría tener registrada la extensión particular de los archivos de base de datos).

Ventanas del programa / 240


Ventana Central de proyectos
Los datos de esta ventana, son bastantes excepcionales: ni son datos del archivo de base
de datos actual (.MEN), ni del programa en general (es decir, datos comunes a todos los
archivos), que se guardan en el archivo .INI de configuración.

Esta ventana gestiona archivos .MEC (Menfis Central), que son a su vez índices con
referencias a archivos de todo tipo. Su principal utilidad es juntar y organizar múltiples
archivos de un proyecto. Los archivos referenciados pueden ser .MEN (de proyecto,
ofertas, bases de precios...) o de cualquier otro tipo (gráficos, texto, fotos, ayuda, hojas de
cálculo...).

La lista de elementos sólo son referencias y el doble clic sobre las líneas nos permite
cargar en la ventana principal el archivo (si es un archivo Menfis; sino se abrirá el
programa para el que está registrada la extensión del archivo en Windows). Así tenemos
una forma muy cómoda de hacer un índice y acceder a varios archivos.

La primera línea de la ventana muestra el nombre del último archivo de central que
utilizamos (o aparece en blanco si no tenemos ninguno). Pulsando en el rótulo "Central
de proyectos:" podemos especificar un nombre para el índice de proyectos. El conmutador
Edición, igual que en la ventana principal, permite modificar el archivo .MEC

Los botones de cabecera de esta lista no permiten ordenar, para preservar el orden de
los archivos incluidos. Los archivos se pueden organizar moviéndolos mediante
arrastrar y soltar con el ratón en la columna destinada a ello, y organizarlos en grupos
mediante carpetas a distintos niveles de profundidad, como en la ventana informes y
procedimientos.

Cualquier cambio hecho en la ventana se guarda al cerrarla.

En cada línea que no sea de una carpeta de organización, la información que podemos
almacenar depende de si se trata de archivos Menfis u otro tipo de archivo cualquiera.

En todos ellos se muestra:

El icono representativo del tipo de archivo (sea de Menfis o no).

Una Descripción que es el único campo editable, y la primera vez que se carga un
archivo, coincide con la columna Título; en archivos Menfis, y con el nombre de
archivo en los demás. Luego se puede modificar con el comentario que se desee.

El nombre de Archivo con caminos relativos al directorio en que se encuentra el

Menú Herramientas / 241


archivo .MEC, de esta forma, es muy fácil mover o distribuir índices .MEC con sus
archivos asociados (por ejemplo, teniéndolos todos en el mismo directorio). Los
archivos de otros tipos guardan el camino completo.

El Estado en que se encuentra el archivo, (que puede ser "Activo", "No encontrado",
o "Bloqueado" según se pueda acceder a él, o no).

Y además, en los archivos Menfis, tenemos:

La Clase de archivo; esta clasificación se toma del campo Tipo de archivo de la


ventana Parámetros generales. El funcionamiento de los informes e incluso qué
selección de estos se muestran en el diálogo de selección de destino que se
muestra con el botón Imprime, depende del tipo de archivo, por lo que se debe
poner. También influye para poder relacionarlos en informes, y utilizarlos en
herramientas programadas en JavaScript.

El Título o nombre del Proyecto, que se corresponde con el campo Resumen del
concepto raíz

La Fecha se toma del campo Fecha del concepto raíz, que también se corresponde
con el campo Fecha base de la ventana Parámetros generales.

El Presupuesto total del archivo

Barra de botones
Los primero tres botones muestran sendos diálogos estándar que permiten estas
operaciones:

Crea un nuevo archivo de central de proyectos.

Abre cualquier archivo de central y muestra su contenido. También


se soporta arrastrar y soltar archivos .MEC sobre la ventana de central.

Permite multi-seleccionar varios archivos de base de datos para


incluirlos en la lista y relacionarlos en el archivo de central actual. También es
posible arrastrar y soltar cualquier tipo de archivo desde el Explorador de Windows,
sin utilizar este botón.

Abre en la ventana principal el archivo seleccionado (si es una


base de datos de Menfis) o abre el programa asociado en Windows a la extensión
correspondiente. Si pulsamos teniendo seleccionado un directorio, se abre la carpeta
del disco duro con los archivos que contiene.

Si el archivo no está accesible, se puede mostrar el siguiente aviso:

Ventanas del programa / 242


Los informes contextuales de , en este caso son principalmente
comparativos entre todos los archivos Menfis de la central, y volcado de los datos de la
misma.

Busca todos los archivos de la central y relee los datos de todos los
archivos Menfis relacionados para refrescar su contenido y comprobar que están
accesibles en el mismo sitio donde se asociaron. Si alguno de los archivos no está
accesible, se muestra en la columna Estado el correspondiente.

Los pequeños botones Desplazar carpeta a izquierda ,y a derecha , tienen las


funciones habituales en listas de árbol, y puede verlas en la ventana Informes y
procedimientos.

Ventana Conexión ERP


La ventana permite conectar con una B.D. de un sistema ERP (Planificación de recursos
de empresa), que lleva la contabilidad, gestión, recursos humanos, etc. de la empresa.
La conexión está programada en JavaScript para poder personalizarla a cada sistema,
es bidireccional y permite pasar conceptos que son comunes en ambas aplicaciones, de
una a otra. Toda la funcionalidad de traslado de información e incluso la programación
de qué información es posible trasladar, se realiza a partir de un procedimiento
JavaScript.

En la ventana Informes y procedimientos hay un ejemplo de implementación para el


sistema Sigrid de Professional Software. El código para esta conexión está en varios
módulos bajo la carpeta \COLECCIONES ESPECIALES\ MENÚS Y CONTROLADORES\
CONTROLADORES.

Gracias a esto, la conexión es completamente programable.

Pestaña Conexión:
A través de las opciones de estos campos se establece la conexión con la B.D. de ERP.
En Archivo ERP se especifica el nombre y el camino completo (con extensión .SIG
incluida). En Permisos ERP se puede especificar el archivo motor.dat que contiene los
permisos de la base ERP. Si no se especifica ninguno se toma el de Menfis (esto sólo
funcionará si los usuarios son comunes a ambas bases).

Menú Herramientas / 243


En Centro de coste se puede especificar sólo uno a considerar al hacer la conexión,
sino, se tomarán todos los datos.

En Usuario y Clave se ponen los datos para acceder a la B.D. ERP. El usuario que se
propone es el mismo con el que se ha entrado en Menfis (esto sólo vale, igualmente,
si el nombre de usuario al que accedamos en el sistema de usuarios de la base ERP
es igual o convertible).

Abre la B.D. ERP y cambia a un botón Desconectar para cerrar la


conexión.

Pestaña ERP > Menfis:


En la lista desplegable CONSULTA, el informe JavaScript de la conexión, ofrece las
opciones de búsqueda de conceptos que es posible trasladar. Al seleccionar una
opción se realiza una operación select contra la B.D. a la que estamos conectados y
en la lista se muestra el Código y Descripción de todos los conceptos (y en la esquina
superior derecha el número de conceptos que se han obtenido).

Mientras se realiza la consulta, aparece un diálogo de progreso, para poder


interrumpir la búsqueda, y en caso de interrumpirla, se muestran los datos
obtenidos. En la esquina superior derecha de las listas se muestra el índice de los
datos totales de la lista y los seleccionados.

Con los botones Traslada y Prueba, realizamos el traslado al archivo actual de Menfis,
de las líneas que tengamos marcadas mediante multiselección, o bien sólo se
muestran los datos en la pestaña Sincronización como prueba.

Algunas descripciones de conceptos pueden cambiar, porque el procedimiento JS, al


utilizar como separador la comilla simple ('), si encuentra una, la sustituye por una
doble (ya que es una especie de "carácter no permitido").

Pestaña Menfis > ERP:


Análoga a la pestaña anterior, pero la lista desplegable CONSULTA muestra las

Ventanas del programa / 244


opciones de traslado que tenemos DESDE Menfis.

Pestaña Sincronización:
Muestra las líneas pendientes de Sincronización, cuando se hace una prueba, pero
su función es sincronizar todos los datos de los dos archivos (Menfis y ERP) en las dos
direcciones, produciendo en el caso que se ha programado para Sigrid, un resultado
como:

Datos Comunes (Menfis->Sigrid)


Unidades de medida · Leídas (19) Añadidas (0)

Formas de pago · Leídas (0) Añadidas (0)

Formas de envío · Leídas (0) Añadidas (0)

Localidades · Leídas (0) Añadidas (0)

Provincias · Leídas (0) Añadidas (0)

Entidades Bancarias · Leídas (0) Añadidas (0)

Documentos (Menfis->Sigrid)
Albaranes de Venta · Leídos (0) Añadidos (0)

Facturas de Venta · Leídos (0) Añadidos (0)

Albaranes de Compra · Leídos (0) Añadidos (0)

Facturas de Compra · Leídos (0) Añadidos (0)

Ofertas de Compra · Leídos (0) Añadidos (0)

Pedidos de Compra · Leídos (0) Añadidos (0)

Ofertas de Venta · Leídos (0) Añadidos (0)

Pedidos de Venta · Leídos (0) Añadidos (0)

Datos Comunes (Sigrid->Menfis)


Unidades de medida · Leídas (22) Añadidas (3)

Formas de pago · Leídas (48) Añadidas (48)

Formas de envío · Leídas (2) Añadidas (2)

Entidades Bancarias · Leídas (29) Añadidas (12)

Documentos (Sigrid->Menfis)
Albaranes de Venta · Leídos (2) Añadidos (2)

Facturas de Venta · Leídos (498) Añadidos (498)

Albaranes de Compra · Leídos (49) Añadidos (49)

Menú Herramientas / 245


Facturas de Compra · Leídos (3748) Añadidos (3748)

Ofertas de Compra · Leídos (0) Añadidos (0)

Pedidos de Compra · Leídos (0) Añadidos (0)

Ofertas de Venta · Leídos (0) Añadidos (0)

Pedidos de Venta · Leídos (0) Añadidos (0)

Ventana Modos traslada


Accesible desde la opción M odos Traslada... , esta ventana es la única compartida por
los dos juegos de ventanas de la aplicación: 1 y 2 (es la misma para ambas) y permite
activar o desactivar cada modo de trasladar las distintas unidades de información. Estos
modos afectan a la información que se traslada mediante los botones Traslada de las
ventanas, al copiar, y al arrastrar y soltar.

Los modos definidos en esta ventana afectan al traslado entre los dos juegos de
ventanas, y a la importación y exportación.

Filtro
Permite definir en el campo multilínea Conceptos {...} una o varias máscaras de
selección de códigos, opcionalmente con Tipo y Clase, a los que aplicar el traslado.

Ventanas del programa / 246


Se puede poner una o más máscaras (una por línea) como:

MO???* : Conceptos que comienzan con 'MO' y tengan al menos 5 caracteres

MQ[1-3]* : Conceptos que empiecen por 'MQ' seguido de 1,2 ó 3

Las dos máscaras son aditivas, no excluyentes; o sea, que se consideran para el
traslado las que cumplan una U otra, no ambas. Aparte, se podría especificar el
Tipo y clase, anteponiendo en nombre de Clase con el punto separador (·), como:

maq·MM* : Conceptos de tipo recurso y clase maquinaria que comiencen con


'MM'

La selección de este filtro NO afecta al traslado de conceptos seleccionados


manualmente, (para pulsar Traslada o arrastrar y soltar conceptos desde la
ventana paralela), se utiliza para importación y exportación.

M áscara para organización automática: Nos permite establecer el criterio con el


que se organizarán los conceptos de forma automática.

El formato que se debe emplear es ABCDE.... con el significado:

AAA Indica que utilicemos los tres primeros caracteres del código para montar
un único nivel de capítulos. Por ejemplo, en el capítulo ABC se colgarán todos los
conceptos que su código empiece con ABC.

AABC indica que utilicemos los dos primeros caracteres de los códigos para
montar el primer nivel de capítulos, el tercer carácter para montar el segundo
nivel y el cuarto carácter para el tercer nivel.

La sección Modificadores

Contiene opciones especiales para todas las opciones posteriores:

Reescribir si existe: Cualquier elemento (concepto, propiedad, texto, etc.) que sea
trasladado y exista en la base de datos destino (sea el mismo archivo o no),
sobrescribirá al que allí había.

Crear si no existe: Se dan de alta en el destino los, conceptos, relaciones, y datos


de otras tablas al trasladarlos.

Eliminar relaciones previas: Si el concepto existe y tiene relaciones inferiores,


mantiene sólo las nuevas.

Menú Herramientas / 247


Permitir relaciones duplicadas: Principalmente dentro de un mismo archivo, si
duplicamos un concepto colgándolo de más de un sitio, se permite que mantenga
las relaciones que ya tenía. aunque fuesen con el mismo concepto.

Conversión DOS-W IN: Traslada la información convirtiendo los caracteres


correspondientes al juego de caracteres Ms-DOS (normalmente la página de
códigos ASCII internacional: 850), al juego de caracteres ANSI de Windows. Útil
para conversiones de archivos de texto para FIEBDC, o para exportar a programas
antiguos que no soporten ANSI (aunque utilizando esta conversión se pierde
información de caracteres acentuados, etc.)

Formato no estándar: Sólo se utiliza en casos especiales de importación/


exportación FIEBDC en los que nos interese trasladar datos propios de Menfis, y no
sólo los datos estándar (documentos, fechas, duraciones de actividades, marcas de
partida finalizada, coeficientes particulares del archivo, tipos de conceptos y otros).
A la hora de la importación, también admite todos estos campos de información,
cosa que no sucede al estar desactivada la casilla.

La conversión automática de versiones anteriores del programa (3, 4 y 5), utiliza


una importación temporal automática de datos en este formato BC3 no estándar,
para no perder ninguna unidad de información. En cambio, en la redacción de
Bases de Precios de la Construcción estándar, este modo debe estar desactivado
(lógicamente), por eso es la opción por defecto.

Capítulos por código: Es una opción sólo disponible para el módulo de


desarrolladores de bases de datos. El conmutador Capítulos por código, cuando está
activo, hace que se trasladen todos los capítulos cuyo código está contenido en el de
los conceptos trasladados. Por ejemplo, si se traslada la partida EADE.1a , se
trasladarán también los capítulos EADE, EAD, EA y E, que quedan en la lista de
conceptos, pero descolgados de la estructura de obra.

Derivados: Traslada las descomposiciones de todos los conceptos paramétricos que


podrían generar las familias paramétricas que se trasladen.

Trasladar de conceptos

Encontramos opciones para seleccionar la información más habitual relacionada


directamente con cualquier tipo de concepto. El selector Descripciones se refiere a
los textos extensos en la pestaña de texto plano, sin contar los textos clasificados
de pliegos. Si elegimos esta opción, Textos (Pliegos), sólo se trasladarán los textos
cuyas clasificaciones existan en el destino: las clasificaciones no se dan de alta.

Términos, Gráficos o Valores...

Trasladar descomposiciones

Define qué elementos "hijos" se arrastran al copiar o trasladar un concepto. Todas


es cualquier relación inferior, de todos los tipos de conceptos. Sólo de carpetas,

Ventanas del programa / 248


contempla todas las descomposiciones, pero sólo de capítulos y Ninguna, ignora
todos los conceptos hijo.

Trasladar mediciones

Permite seleccionar algo parecido, pero en cuanto a líneas de Medición. Con


ninguna, podemos trasladar conceptos con la medición en blanco, sea la medición
directa o desglosada.

Modo de importación de gráficos

Permite elegir la forma en la que queremos importar los gráficos procedentes de


un archivo en formato BCZ.

Vinculado automático.- Guarda los gráficos junto al fichero .men abierto. Si


cambiamos la ubicación del archivo .men, es necesario cambiar también la de los
gráficos para poder visualizarlos.

Incrustado.- Incluye los gráficos dentro del archivo .men al que se asocian. Por lo
que si cambiamos de ubicación el archivo, los gráficos van con él.

Vínculo absoluto.- Guarda la ruta en la cual se han importado los gráficos y


siempre acude a esa ubicación cuando es necesaria su visualización. Los gráficos
estarán siempre disponibles en esa ruta independientemente de la ubicación que
tenga el archivo .men.

Importación al arrastrar y soltar en FIEBDC-3


Nos permite establecer un criterio fijo a la hora de importar los ficheros en formato
BC3, o permitir que se nos pregunte cada vez que importamos un nuevo fichero
bc3.

Las opciones Incluir en nivel actual y Crear archivo nuevo se encuentran


explicadas en el apartado de Importación de ficheros BC3

La barra de botones al pie:


Actualiza la ventana con las opciones pregrabadas en el programa,
por si hemos hecho muchos cambios a las opciones y deseamos restaurar el estado
más normal de traslado. Sólo tiene utilidad dentro de la misma sesión del programa,
porque cada vez que se arranca, esta ventana toma SIEMPRE los valores de defecto.

y Permiten guardar y recuperar

Menú Herramientas / 249


configuraciones y máscaras en plantillas que se guardan como un archivo de texto
dentro del subdirectorio \MACROS. Los archivos tienen extensión .TRA y uno de ellos
existe siempre: ACTUAL.TRA que tiene los valores iniciales del programa.

Sale de la ventana. Mientras no se entre otra vez en esta ventana


a modificar los modos, o se salga de la aplicación, los traslados se ejecutarán con los
modos activos.

Diálogo repara B.D.


Al seleccionar la opción del menú, se nos muestra un diálogo de progreso que da
información sobre qué parte de la información del archivo se está reparando.

Este chequeo se hace siempre que el archivo pertenezca a una versión anterior pero
compatible, de forma que haciendo un chequeo automático la primera vez que se abre
el archivo, se comprueba que la integridad de todos los datos se mantiene, y se añaden
los campos y datos de la nueva estructura necesarios para su correcto funcionamiento.
Por tanto, una base reparada con una versión determinada será imposible de utilizar en
versiones anteriores del programa.

La duración aproximada de un chequeo para un archivo de cientos de Mb. es de unos


pocos segundos, y al terminar, se muestra un estado del archivo y los procesos
realizados con el resumen de los posibles errores y avisos, con el aspecto:

Muestra directamente ese archivo de texto con el programa


Wordpad, para no tener que buscarlo.

Casi todos los errores producidos por un corte de luz que pudiera estropear una
transacción, o la corrupción de alguna tabla del archivo, se pueden reparar sin perder
otros datos.

Cuando el programa detecta errores o da avisos, crea el archivo CHEQUEA.LOG en el


directorio \TEMPORAL con detalles de los errores encontrados. Este proceso, en
archivos con grandes bases de datos puede necesitar bastante tiempo para su
ejecución.

El diálogo se puede interrumpir, y el chequeo se cancela sin que por ello quede el
archivo en un estado distinto al que se encontraba.

IM PORTANTE: Si debido a una actualización de versión, debe actualizar muchos

Ventanas del programa / 250


archivos de base de datos, no hace falta que los abra de uno en uno: pulsando las teclas
CONTROL+MAYÚSCULAS mientras pulsamos la opción de menú, se buscan todos los
archivos que estén en el mismo directorio que el abierto actualmente (sin buscar en
subdirectorios), y se chequean y reparan todos los encontrados de forma automática.

Al final del proceso, se abre el bloc de notas con el archivo presenta.txt incluyendo la
lista de todos los archivos encontrados, y si ha podido chequearlos o qué problemas se
han presentado.

Submenús de Exportacion e Importación


Exporta FIEBDC-3...

La opción Exporta FIEBDC... del submenú menú exporta, nos permite grabar un
archivo de Formato de intercambio estándar con extensión .BC3, con la información del
archivo actual y que esté activa en la ventana Modos Traslada.

Menú Herramientas / 251


Grabará en el mismo lugar de destino que el archivo actual de datos, y con
el mismo nombre (el que se sugiere), el archivo con la información requerida. Si el
nombre introducido no tuviera la extensión .BC3, se le pondrá automáticamente; y si
en el nombre del archivo no se incluye el camino se grabará en el directorio mostrado.

Mientras se está grabando se presenta un diálogo de progreso con el botón Interrupción.


Esta operación puede necesitar bastante tiempo para su ejecución con archivos grandes
de bases de datos. En estos casos, pasado un tiempo, se deshabilita la casilla de Edición
si estuviese activada, para que en caso de dejar el proceso y el ordenador desasistidos,
no se quede abierto el archivo al terminar.

Cuando exportamos los datos de un archivo de control de costes (con mucha más
información que la estándar del FIEBDC-3, y tipos de conceptos propios solamente de
Menfis), se exporta el presupuesto y los conceptos más de todas clases con la
información estándar existente. Por ejemplo, se exportan contratos, documentos,
centros de coste, personas y equipos, con sus datos de concepto, textos, fechas...

Exporta BCZ

La opción Exporta a BCZ... del submenú menú exporta, nos permite grabar un archivo
de Formato de intercambio estándar con extensión .BC3 con la información del archivo
actual y las posibles imágenes incrustadas del archivo origen. Al igual que la
exportación a BC3, se rige por los criterios marcados en la ventana Modos Traslada.

Ventanas del programa / 252


Grabará en el mismo lugar de destino que el archivo actual de datos, y con
el mismo nombre (el que se sugiere), el archivo con la información requerida. Si el
nombre introducido no tuviera la extensión .BCZ, se le pondrá automáticamente; y si
en el nombre del archivo no se incluye el camino se grabará en el directorio mostrado.

Este tipo de archivos tienen la ventaja de incluir en su interior los posibles gráficos
vinculados o incrustados en el archivo de origen. Cosa que no ocurre con el formato
BC3, que exporta las imágenes y los datos por separado.

Mientras se está grabando se presenta un diálogo de progreso con el botón Interrupción.


Esta operación puede necesitar bastante tiempo para su ejecución con archivos grandes
de bases de datos. En estos casos, pasado un tiempo, se deshabilita la casilla de Edición
si estuviese activada, para que en caso de dejar el proceso y el ordenador desasistidos,
no se quede abierto el archivo al terminar.

Cuando exportamos los datos de un archivo de control de costes (con mucha más
información que la estándar del FIEBDC-3, y tipos de conceptos propios solamente de
Menfis), se exporta el presupuesto y los conceptos más de todas clases con la
información estándar existente. Por ejemplo, se exportan contratos, documentos,
centros de coste, personas y equipos, con sus datos de concepto, textos, fechas...

Importa FIEBDC-3...

La opción Importa FIEBDC... del submenú menú importa, permite incluir en el archivo
abierto actualmente, y en la FASE ACTUAL del mismo, la información contenida en un
archivo de Formato de Intercambio Estándar. Sólo se incluirá la información
correspondiente a los modos activos en la ventana Modos Traslada.

Abre el diálogo de selección de archivos diálogo estándar, con los archivos de


extensión .BC3 que se encuentran en el directorio de trabajo, de los que se selecciona
el que se quiera importar.

Menú Herramientas / 253


Mientras se incluye el archivo aparece un diálogo con el botón Interrupción. Esta
operación puede necesitar bastante tiempo para su ejecución en el caso de grandes
archivos de bases de datos; en estos casos, pasado un tiempo, se deshabilita la casilla
de Edición, para que en caso de dejar el proceso y el ordenador desasistidos, no se quede
abierto el archivo al terminar.

Otra posibilidad, para abrir archivos en formato BC3, es arrastrar desde el Explorador de
Windows un archivo sobre la ventana principal, igual que hacer doble clic sobre ellos. Al
arrastrar y soltarlo sobre la ventana de trabajo de Menfis se nos mostrara el siguiente
diálogo:

incluye los datos arrastrados en el nivel en el que estemos


ubicados en la obra. Es muy útil para la importación de capítulos o partidas sueltas en
un presupuesto en construcción.

Ventanas del programa / 254


Crea un nuevo archivo, con la extensión .men y el nombre del
archivo BC3, y en él sitúa los datos arrastrados.

Una vez importado el fichero, se nos muestra un cuadro de diálogo con el resultado de la
importación y los posibles errores acontecidos durante la misma.

Pestaña información
Esta pestaña nos muestra todos los datos referentes al fichero que acabamos de
importar: El programa generador, la version del FIEBDC-3, la fecha y el juego de
caracteres que utiliza. A continuación vemos un resumen de los registros importados
ordenados según el criterio del Formato de Intercambio Estándar FIEBDC-3. En esta
ventana podemos, además, ver si se han producido incidencias durante la
importación, mediante un mensaje que se muestra en la parte inferior de la
ventana.

Pestaña Conceptos
Nos muestra un listado con todos los datos importados, ordenados según los criterios
de clasificación del programa. Al hacer doble clic sobre cualquiera de los elementos
de la ventana,se nos muestra en lista de conceptos todos los elementos que hay en la
obra con su misma clasificación.

Menú Herramientas / 255


Pestaña Decimales
Nos muestra la cantidad de decimales definidos dentro del fichero BC3 para cada
campo del presupuesto. Cada definición de campo va acompañada de su código de
codificación en FIEBDC-3. En Menfis, estos datos están definidos en la pestaña
decimales de la Ventana de Parámetros generales.

Pestaña Incidencias
En esta pestaña se nos muestra el detalle de los errores producidos durante la
importación, si los hubiese.

Con el fin de mejorar la importación de este tipo de archivos, hemos añadido tres
nuevas columnas de referencia muy útiles para comparar datos provenientes de
archivos BC3. Estas tres columnas son Precio BC3, Medición BC3 e Importe BC3, y en
caso de haber diferencia con los datos mostrados en las columnas análogas, nos
muestra un mensaje de advertencia.

Son muy útiles para detectar diferencias entre precios de partidas, capítulos o
presupuestos. Los datos incluidos en estas columnas son importaciones literales de los
datos de registro del BC3. Los precios de partidas y capítulos no corresponden a la suma
de los precios de sus descomposiciones, ni las mediciones totales a la suma de sus
mediciones desglosadas, sino que corresponden a los datos contenidos en el BC3. La
diferencia con las columnas Precio, Medición e Importe de la obra, es que éstas sí se
obtienen de cálculos previos basados en su descomposición. Por tanto podemos
identificar errores por manipulaciones incorrectas de los datos de una obra.

Ventanas del programa / 256


Importa BCZ

La opción Importa BCZ del submenú menú importa, permite incluir en el archivo
abierto actualmente, y en la FASE ACTUAL del mismo, la información contenida en él.
Sólo se incluirá la información correspondiente a los modos activos en la ventana
Modos Traslada.

Abre el diálogo de selección de archivos diálogo estándar, con los archivos de


extensión .BCZ que se encuentran en el directorio de trabajo, de los que se selecciona
el que se quiera importar.

Mientras se incluye el archivo aparece un diálogo con el botón Interrupción. Esta


operación puede necesitar bastante tiempo para su ejecución en el caso de grandes
archivos de bases de datos; en estos casos, pasado un tiempo, se deshabilita la casilla
de Edición, para que en caso de dejar el proceso y el ordenador desasistidos, no se quede
abierto el archivo al terminar.

Menú Herramientas / 257


Otra posibilidad, para abrir archivos en formato BCZ, es arrastrar desde el Explorador de
Windows un archivo sobre la ventana principal, igual que hacer doble clic sobre ellos. Al
arrastrar y soltarlo sobre la ventana de trabajo de Menfis se nos mostrara el siguiente
diálogo:

incluye los datos arrastrados en el nivel en el que estemos


ubicados en la obra. Es muy útil para la importación de capítulos o partidas sueltas en
un presupuesto en construcción.

Crea un nuevo archivo, con la extensión .men y el nombre del


archivo BC3, y en él sitúa los datos arrastrados.

Una vez importado el fichero, se nos muestra un cuadro de diálogo con el resultado de la
importación y los posibles errores acontecidos durante la misma similar al que se
obtiene al importar un fichero en formato BC3.

Importa mediciones AllPlan FT v16

La opción Importa mediciones AllPlan FT v16 (XCA)... del submenú Menú Importa,
permite incluir en el archivo abierto actualmente, y en la FASE ACTUAL del mismo, la
información de mediciones contenida en uno o varios archivos de Formato de
Intercambio de Nemetscheck (un archivo ASCII separado por tabulaciones). Sólo se
incluirá la información correspondiente a los modos activos en la ventana Modos
Traslada.

del diálogo estándar de selección de archivos con extensión XCA,


incorpora todos los seleccionados.

Ventanas del programa / 258


En el archivo de texto, al importar, se realizan las siguientes acciones:

Se recorre cada línea de cada archivo XCA

Con el código del “Material", se busca el concepto en el archivo actual, si no se


encuentra se busca en el archivo abierto en la ventana paralela y se traslada con
los Modos Traslada actuales. Si tampoco se encuentra el concepto en el archivo
paralelo, se da de alta con la “Unidad” y “Nombre del objeto o macro” del archivo
XCA.

Si el código del material tiene padre (Ej. “C11\E3138”) se da de alta el padre de la


misma forma.

Se cuelga el material del padre si existiese, y si no existe, del capítulo


“ALLPLAN” (que se crea si no existe y se cuelga del concepto raíz).

Se leen las mediciones y se incluyen con la siguiente correspondencia entre


campos de Menfis y campos de archivo:

o Comentario: “No. de elem. const. (Posición)” [ · “Función”] [ · “Denominación”]


[ · “Dimensiones”] [ · “Denominación2”] [ · “Texto1”] [ · “Texto2”] [ · “Texto3”] [ ·
“Texto4”] [ · “Texto5”]

o NºUnidades: “Piezas”

o Largo: “Medición”

Previamente se analiza la formula de medición y si esta está formada solo por


multiplicaciones se distribuyen en los campos Largo, Ancho y Alto y se eliminan
del Comentario.

Las líneas de entidades que no tienen código en el campo "Material" porque lo


tienen en la columna "Denominación" se ignoran (Cavidad en forjado, Nicho,
Junta, Jamba...)

El formato del archivo de intercambio .XCA, y significado de sus


campos:
NOMBRE CAMPO DESCRIPCIÓN COMENTARIOS

ID Archivo Número de capa

Nombre de archivo Nombre de la capa 1 - 50 Caracteres

Unidad Unidad de medición Con caracteres de


superíndice en m2,
m3, etc…

Material Código de material Los elem. con Factor=-


1 (cavidades, huecos…)
tienen copiado en este
campo el 'Nombre de
objeto'

Menú Herramientas / 259


Nombre del objeto o Denominación del elemento
macro

No. de elem. const. Número de elemento Sólo disponible si el


(Posición) constructivo usuario numera
elementos

Factor Factor: número de elementos


(positivo o negativo en caso de
descontar)

Dimensiones Dimensiones: descripción del El separador decimal es


calculo efectuado entre punto (.)
dimensiones

Medición Medición total incluido el El separador decimal es


'Factor' o número de coma (,)
elementos iguales

Función Función en caso de elementos


o superficies pertenecientes a
un local

Denominación Denominación en caso de Los elem. relacionados


elementos o superficies con otros (como
pertenecientes a un local complementarios o
huecos) llevan el código
aquí

No. de elem. const. Número de elemento Sólo disponible si el


(Posición) constructivo del elemento al usuario numera
que pertenece (p.ej. En caso elementos
de acabados, el del local al que
pertenece)

Texto1 Texto1 Comentarios

Texto2 Texto2

Texto3 Texto3

Texto4 Texto4

Texto5 Texto5

Ventanas del programa / 260


Personalización de la barra de herramientas
A esta ventana se accede desde la opción Barra de herramientas... o haciendo doble clic
sobre el espacio libre de la propia barra. Nos permite configurar los botones que
aparecen en la barra de herramientas o iconos de la ventana principal. Los iconos no se
pueden cambiar, sólo se puede hacer que aparezcan o no en distintos grupos
delimitados por unos separadores verticales, y se pueden cambiar de orden.

Se divide en 2 paneles verticales: Botones disponibles y Botones actuales, separados por


una barra vertical de botones que tiene las funciones de configurar.

Desplazar icono hacia arriba y hacia abajo , sólo actúan sobre el panel derecho,
para desplazar los botones en el orden que queramos.

Añadir a la barra actual y Eliminar de la actual , tienen la misma función que el


doble clic en cualquiera de los 2 paneles: haciendo doble clic sobre un botón del panel
derecho, lo eliminamos de la barra y haciéndolo sobre el izquierdo, ponemos ese botón
en la posición actual de la selección en el panel derecho.

Introducir un separador , introduce un pequeña barra vertical separando grupos de


botones.

Permite obtener una configuración del archivo .INI de la aplicación.

Los cambios en la selección de botones se van viendo en tiempo real en la ventana


principal.

Menú Herramientas / 261


Ventana Utilidades
Accesible desde la opción Utilidades..., muestra botones que dan acceso a unas
utilidades externas al programa principal, con el mismo nombre que el indicado en los
botones y varias utilidades para el manejo de archivos.

Pestaña General:
Cada botón de esta pestaña abre un programa externo, complementario al ejecutable
de la propia aplicación. En el caso de Inca, además cierra automáticamente la
aplicación para poder operar.

Ejecuta un programa que comprueba mediante


una conexión a Internet, el sitio de Ingra http://www.ingra.es , mirando si existe una
actualización para la versión de programa actual. Si ya está conectado a Internet, o
tiene una conexión permanente (por ejemplo mediante ADSL), lo verifica
directamente, y sino, se abre el diálogo de conexión a Internet.

Si la versión del programa es la más moderna, se muestra el mensaje:

Si existe una actualización dentro del segundo dígito de la versión -se entiende por
actualización, un "service pack" con mejoras y corrección de errores-, se abre un
diálogo con los datos de la versión actual del programa, la versión disponible en
Internet, un comentario sobre las modificaciones que va a realizar la actualización.
El botón ACTUALIZA..., descarga el paquete con un diálogo de progreso, y lo instala
sobre el programa.

Es decir, en cualquier momento podemos actualizar gratuitamente la versión 1.2.10


a la 1.2.14, o la 1.2.30 -que son revisiones y correcciones menores de una versión-,
pero no a la 1.3.x ó 1.4.x),

Para administradores: al llevar a cabo la actualización de la aplicación, lógicamente:

Ventanas del programa / 262


El programa NO debe tener abierta ninguna otra instancia en la máquina actual

Si está como instalación servidora, tampoco debe haber ningún cliente utilizándolo

No se deben utilizar ninguno de los programas externos (Trasgo, Diana, Dxi...) que
también podrían ser actualizados.

Si se da alguno de estos casos, y el paquete de actualización intenta sustituir alguno


de los archivos en uso, se muestra el aviso: "Actualización incompleta" indicando los
archivos que no se han podido actualizar. En este caso, se ofrece la posibilidad de
liberar los archivos en uso y re-lanzar la actualización con el paquete que ya se tiene
descargado de Internet.

Los dos programas siguientes tienen su propia ayuda en línea, accesibles desde los
botones de ayuda de cada programa:

Abre el programa que permite introducir


términos y textos en el tesauro temático al que se accede en la ventana Tesauro, así
como modificar los lemas que contiene, introducir nuevas reglas ortográficas, etc.

Abre el programa que permite modificar los


rótulos del programa para traducirlo a cualquier idioma o cambiar rótulos para
personalizarlo a la terminología propia del ámbito en que nos movamos. También
sirve para actualizar lenguajes de alguna versión anterior.

Pestaña Archivos:

Conversión de archivos

y Permiten realizar la conversión de


archivos de texto entre los juegos de caracteres estándar de Windows y los de Ms-
DOS.

Los juegos de caracteres de estos dos sistemas difieren en la zona conocida como
“parte alta” o “extensión de 8 bits”, que es la que incluye las eñes y las vocales
acentuadas; como consecuencia, si vemos un archivo creado en MS-DOS con un
editor de textos de Windows —o viceversa— aparecerán caracteres extraños donde

Menú Herramientas / 263


deberían aparecer las letras mencionadas.

Al utilizar estas funciones, tenga en cuenta que el resultado de convertir un


archivo en una dirección y realizar luego la conversión inversa puede no ser
exactamente el archivo original, pues los dos juegos de caracteres no solamente no
coinciden en la colocación de las letras, sino que tampoco están compuestos
exactamente por los mismos caracteres.

Por ejemplo, el juego de Windows incluye todas las vocales acentuadas, en


mayúsculas o en minúsculas, pero la única vocal mayúscula acentuada que
contiene el juego de MS-DOS es la "E". Como consecuencia una doble conversión
podría llevarnos al siguiente resultado:

CONVERSIÓN RECONVERSIÓN MS-DOS -


ORIGINAL
WINDOWS -> MS-DOS > WINDOWS

ÁÉÍÓÚáéíó
AÉIOUáéíóú AÉIOUáéíóú
ú

División de un archivo en varios

, y nos permiten fragmentar en partes más


pequeñas (del tamaño deseado) un archivo de cada uno de esos tres tipos.

El objeto original de estas funciones es permitir la transferencia en disquetes de


grandes archivos de intercambio, y su reconstrucción posterior en el sistema de
destino, pero nada impide utilizarlas para otros fines.

La diferencia entre los tres tipos de divisiones es el punto donde se realiza la


división del archivo:

La división FIEBDC divide los archivos al comienzo de un registro (delante del


carácter ~).

La división texto divide los archivos después de final de línea (detrás de CR/LF,
valores 013 010).

La división binario divide los archivos exactamente al tamaño definido.

Las funciones de división de archivos, solicitan el tamaño máximo, en número de


caracteres, de los archivos que se quieren dividir. Por defecto presenta 1.400.000.

El sistema utiliza el nombre del archivo para producir los archivos divididos,
añadiendo un número al mismo, en consecuencia los nombres de los archivos que
se deseen dividir, no deberán exceder siete caracteres, y el último no deberá ser
un número.

Tiene como propósito reconstruir un archivo que ha


sido previamente dividido en varios, o reunir varios archivos de texto con otra
procedencia.

Este botón abre un diálogo estándar para seleccionar el primer archivo de una
serie que debe ir numerada consecutivamente y desde el número '1', por ejemplo:
base1.txt, base 2.txt, base3.txt, etc. A partir del primer archivo unirá todos en uno

Ventanas del programa / 264


nuevo con el nombre sin índice (en este caso: base.txt).

Renombra archivos

Extiende las funciones de Ms-DOS para hacer más cómodo y potente el renombrado
de grupos de archivos. En los dos campos de texto Origen y Destino introducimos
máscaras para los archivos que queremos seleccionar, pero utilizando máscaras de
búsqueda SQL que extienden y potencian a las comunes de Ms-DOS.

y nos permiten realizar el cambio o ver una


lista de modificaciones antes de realizarlas.

Ventana Opciones
Accesible desde la entrada Opciones..., se utiliza para configurar distintos parámetros
del programa, y para instalar, y desinstalar los permisos de ejecución. También nos
informa del nombre de los directorios de trabajo y permite registrar el programa en el
Registro de Windows (por ejemplo, si tuviésemos dos versiones de este mismo programa,
sólo una de ellas podría tener registrada la extensión particular de los archivos de base
de datos).

Pestaña Configuración:
Al cambiar muchas de estas opciones, cambia el interface de campos de las
ventanas, por lo que en algunos casos se cierra y vuelve a abrir la aplicación.

Menú Herramientas / 265


Sección Opciones de formato
La lista desplegable Lenguaje que permite elegir (de entre los que se suministran
con la aplicación), el idioma que se desee para todos los textos, rótulos, mensajes,
informes, etc. del programa.

La elección del Lenguaje determina un cambio en todos los rótulos y textos del
programa, en los informes, configuraciones de ventanas, y Parámetros generales.
Para ver cómo modificar uno de los lenguajes distribuidos con términos más
familiares a nuestro ámbito de trabajo, o crear un lenguaje nuevo, vea la
documentación de Trasgo, sistema de traducción.

En el campo Fecha actual se puede modificar la fecha (tomada del sistema al


arrancar el programa), que se considerará fecha DE HOY en todo el programa.
Cualquier referencia en el programa o en la documentación a fecha actual, se
referirá a éste campo.

Ventanas del programa / 266


El campo Formato de fechas (d/m/a) permite definir el formato que se presentará
en ventana principal, en los campos de fechas y el que pondrá por defecto la
función de fecha de JavaScript. El campo admite rótulos de texto mezclados con los
datos de Día, Mes y Año, y permite colocar con casi cualquier formato y
separadores, esos datos, sirvan de muestra estos ejemplos, con la fecha 3-7-02:

TECLEADO FORM ATO

'En 'dd' de 'mm' de 'aaaa'' En 03 de 07 de 2002

dd/mm/aa 03/07/02

d-m-a 3-7-02

dd-mm-aa 03-07-02

ddd dd-mmm-aaa Lun 03-Jul-2002

dddd dd mmmm aaaa Lunes 03 Julio 2002

(*) observamos que cuando los códigos llevan texto QUE CONTENGA los caracteres
'd', 'm', ó 'a', toda la cadena del campo debe ir entre comillas simples (el apóstrofe),
y cada uno de los campos también, en otro caso, no hace falta.

Formato de horas (h:m:s) es similar al anterior, pero para los campos que
muestren o acepten datos de horas. Al abrir la ventana muestra la hora actual, con
el formato de defecto con los separadores elegidos.

El campo Plantilla (dir. público), se refiere al nombre de archivo de base de datos


(habitualmente "nuevo" ya que no necesita extensión de archivo), que se
encuentra en el directorio de instalación. Esta plantilla sirve para no partir
completamente de cero cuando creamos una nueva base de datos, sino que se
incorporan los iconos, carpetas, etc. que queremos utilizar como defecto, y sobre
todo la configuración más habitual de Parámetros generales.

Opciones de visualización

No incluir códigos en referencias a carpetas, que permite ocultar de la


visualización los códigos sólo de los conceptos de tipo Carpeta: donde aparezca el
par <código · resumen>, sólo aparecerá el segundo (línea de padres de la ventana
principal, cabecera de la ventana de propiedades de carpetas, etc.).

En algunas versiones de la aplicación puede aparecer un conmutador Modo


compatibilidad <nombre del programa y versión>, que modifica la apariencia de
algunos iconos de la ventana principal, el aspecto de la columna Info, etc. para dar
un aspecto igual a versiones anteriores.

Al minimizar la ventana principal minimizar ventanas hijas hace que si se


minimiza una ventana (Menfis1 o Menfis2) todas las ventanas auxiliares de estas,

Menú Herramientas / 267


se minimicen junto con la principal.

Al abrir un nuevo archivo entrar en modo "Edición" por defecto hace que siempre
que abramos los archivos que ya existen esté marcado el conmutador edición en la
ventana principal de Menfis. En caso de que el archivo tenga asignada una clave
de acceso contra edición, esta opción no tendrá efecto.

Opciones de introducción de FECHAS


Permite invertir la forma en la que se entienden las fechas incompletas,
rellenando los datos que faltan por la izquierda. Ejemplo, si en el modo normal (sin
el conmutador activado), tecleamos "10/02" en un campo de fecha, se rotula la
fecha "10/2002", y en cambio, con el conmutador activado se entenderá
"10/02/2003" porque rellena fechas por la derecha en vez de por la izquierda, y
pone el año o mes actual.

Opciones de visualización de REFERENCIAS


Estas opciones se aplican SÓLO a los campos de referencias a otros conceptos, a
clasificaciones, etc. que se muestran en las ventanas de propiedades, no a las
referencias que hay en otras ventanas de la aplicación.

Código y Descripción acepta la entrada del campo para buscar dentro del Código, si
no se teclea un código existente. Descripción considera que el texto tecleado es de
la descripción o Resumen del concepto y si coinciden varios con la entrada,
muestra una lista de los posibles, buscando en la Descripción. Doble campo
muestra el código y los resúmenes o descripciones en dos campos separados.

Opciones de visualización de ICONOS


Genéricos muestra los iconos que hay predefinidos en la ventana Tipos y Clases,
en la columna Tipo de la ventana principal, y en cualquier otra que aparezca el
icono de Tipo. Especiales, muestra los iconos particulares que podemos asociar
siempre a cada uno de los conceptos individualmente. Gráficos, pone como icono de
cada concepto el primer gráfico que tenga asociado, en miniatura; si no tiene
gráficos, pone el icono especial, y si tampoco tiene, el genérico. En listas de
muchos conceptos se puede notar la velocidad de refresco al tener que generar
todos los iconos.

Opciones de visualización de DIAPOSITIVAS


Diapositivas con resumen como rótulo es un modo especial para el uso de las
diapositivas como navegación en la pantalla principal, que pone al pie de la

Ventanas del programa / 268


diapositiva el campo Resumen del concepto, en vez del Código.

El campo Filtro para carpetas, admite un filtro gráfico de los existentes en la


pestaña Utilidades. El filtro se aplicará como filtro de color a todas la diapositivas
que representan conceptos de Tipo Carpeta para navegación por la ventana
principal. Por ejemplo: color -20 19 -5 pone un tono azulado.

Formato Menú Navegación (Migas)


Estos dos conmutadores sirven para modificar el formato del historial de
navegación de la ventana principal. El conmutador Visualiza resumen cuenta con
una casilla en la que definir los caracteres máximos con que contará el resumen
en dicho historial.

Configuración de correo
Este apartado nos permite introducir la dirección de correo en la que recibiremos
las respuestas a las ofertas enviadas mediante las opciones de enviar por mail,
ubicadas en el menu contextual de la columna tipo y del menú herramientas. es
un campo opcional por lo que no es obligatorio rellenarlo para enviar una oferta,
pero agiliza la comunicación entre remitente y destinatario.

Pestaña Visualización
Subpestaña letras:
Tipos de letra
Tenemos los botones Pequeña, Mediana, Grande y Enorme que definen las fuentes
—de entre todas las que tenemos instaladas en Windows—, que va a utilizar la
aplicación. En el mismo botón aparece el nombre y tamaño de la fuente así como
una ‘N’ y/o una ‘C’ en los casos de negrita y cursiva. Mediante el diálogo que se ve
al pulsar cualquiera de ellos, se pueden definir todas estas características, pero no
otras como por ejemplo, el color, cuya selección no tiene ningún efecto.

Menú Herramientas / 269


El color de la letra pequeña, excepcionalmente, define el color de los rótulos que
aparecen -por defecto en azul oscuro-, encabezando los grupos de campos o
controles en las ventanas (como el propio de Tipos de letra).

Programas es la fuente que se utiliza para las ventanas donde hay código
JavaScript o programas de algún Tipo Carpeta de búsqueda, Informes...)

Textos es la fuente de los textos planos (ASCII) extensos. Cuando se utilizan textos
en RTF, se pueden utilizar muchas fuentes distintas.

Subpestaña colores:
Temas de colores
Aquí podemos encontrar todo lo relacionado con el aspecto que tendrá la interfaz de
nuestro Menfis.

El campo Tema de apariencia nos muestra un menú desplegable desde el que


podemos elegir, de entre una serie de temas predefinidos de Menfis, la apariencia
que tendrá la interfaz de nuestro programa. El tema Personalizado y los marcados
con la letra (C) a pesar de tener parámetros de color definidos son parámetros que
el usuario puede modificar a su gusto. Mientras que los temas NO marcados con la
letra (C) son temas de apariencia predefinidos y cerrados que no dan lugar a
modificación de color en ninguno de sus parámetros.

Ventanas del programa / 270


El campo Ventanas de datos cambia el aspecto y color de las líneas de datos de la
ventana principal. Y Altura de listas varía el tamaño de la linea de datos de la
ventana principal, obteniendo más o menos separación entre cada una de las
líneas.

Colores especiales
Podemos definir algunos de interface y los que distinguen distintos tipos de datos
en la base. Al pinchar sobre el botón, se muestra el diálogo de selección de color,
para que podamos elegir uno que será el representado sobre el botón:

Muestra el color de precios, fechas, etc. que


dependen, de la relación entre conceptos, no están asociados al propio concepto.

Pone el color de los resultados, como los


subtotales acumulados de los descendientes, por ejemplo, si tuviésemos un campo
que realiza ese cálculo. No se permite editar estos campos.

Pone el color de precios cuando en ámbitos


hay definidos varios distintos para el mismo concepto. Si se eliminan los que son
distintos, se volvería a mostrar el precio de su color original, sin alternativos.

Pone el color cuando los datos son


compartidos con otros conceptos de la misma obra.

Muestra el color de todos los campos


editables, cuando se permite la Edición mediante ese modo en la ventana principal

Muestra el color de fondo para los campos que


no se pueden editar por no estar en modo Edición o porque hay opciones
incompatibles con la misma. El color de defecto el es que es sistema tiene para los
botones de las ventanas.

Permite seleccionar el de esos campos, que


tienen un color particular

Rellena el fondo de los datos que pueden ser


distintos para el mismo concepto, cuando hay definidas varias fases. El color de
defecto es el de las pistas ("tips") que aparecen en cualquier aplicación de Windows.

Menú Herramientas / 271


Fondo de ventanas

Permite cambiar desde los botones de Color de fondo el color de la ventana de


Menfis1. También podemos elegir una textura para las ventana de Menfis1. Como
conclusión, vemos que podemos tener distinto color de fondo o distinta textura de
ventana en Menfis1 y Menfis2 para diferenciar en que ventana estamos
trabajando en cada momento.

Fondo de ventana para MENFIS2


Permite cambiar desde los botones de Color de fondo el color de la ventana de
Menfis1. También podemos elegir una textura para las ventana de Menfis1

El color de fondo de las listas desplegables, campos de texto extenso, barras de título
de las ventanas, y otros, tienen asignados —al igual que las fuentes de menú, los
bordes de ventana, etc.— los colores del sistema Windows, que son configurables
desde fuera del programa, en la pestaña Apariencia de las Propiedades de pantalla.

IM PORTANTE: En todos los botones de Colores, al mantener pulsada la tecla


CONTROL mientras hacemos clic, podemos recuperar los colores iniciales de
defecto, ya sean definidos en el escritorio (como el fondo de no editables o fondo de
alternativos), o por el programa.

En la sección Fondo de ventanas tenemos un botón para definir el Color del fondo y
una lista para seleccionar un gráfico con el que se van a rellenar de textura las
ventanas. El color es un gráfico en formato .BMP que se encuentra en el
directorio \GRAFICOS y cuyo nombre comienza con "Fondo_"

Subpestaña personalizar
Dentro de esta subpestaña podemos elegir la configuración de todos y cada uno de
los detalles de nuestro Menfis. Desde el color de fondo general al color de texto de los
check.

Ventanas del programa / 272


Pestaña Licencia:
En esta pestaña se establecen y modifican los permisos y licencia del programa.

La aplicación se distribuye protegida contra copias no autorizadas. La protección se


encuentra, bien en un disquete de permisos o se puede establecer mediante una
clave de acceso ligada a la máquina en la que se instala el programa.

Cualquier CD-ROM de distribución, sin el disquete de permisos o la clave de acceso,


funciona en modo evaluación (demo), y tiene una funcionalidad completa con todos
los módulos posibles, pero con edición limitada a archivos de hasta 200 conceptos.

El sistema de protección no perjudica la eficiencia del programa ni implica ningún


cambio en la configuración del hardware o software de su sistema. No es necesario
que haga copia de seguridad del disquete de permisos -si lo tiene-, porque esta no
funcionará.

Menú Herramientas / 273


Licencia

Nos abre una serie de ventanas que nos


guiarán para la instalación de la licencia de Menfis, ya sea ésta a través de
disquete, por teléfono o a través de una conexión a Internet.

Licencia actual
Bajo esta sección tenemos el rótulo de la instalación y permisos actuales, el
nombre de la aplicación, versión y módulos instalados.

Nuestra aplicación puede mostrarse en uno de estos estados:

Estado 1: versión de EVALUACIÓN (o demo)

Si tiene una versión distribuida gratuitamente en un CD-ROM o a través de


Internet, o bien pirateada de una original, puede trabajar con ella si utiliza una
base de datos pequeña. En caso de que en esta sección sólo aparezca el rótulo
del nombre de programa y el número de versión, significará que los permisos no
han sido instalados y está limitado a archivos de hasta 200 conceptos.

Podemos convertirla en una versión registrada operando con los botones y


campos de las otras secciones. Para más detalles vea Instalación y solución de
problemas.

Estado 2: versión REGISTRADA

Es el estado normal al instalar el programa mediante una disquete de licencia o


con una clave de acceso. La licencia puede incluir diversos módulos del
programa que se pueden registrar sobre una versión de evaluación ya instalada
(en las otras secciones de esta pestaña) o al instalar el programa, desde el
propio programa de instalación.

Un programa en este estado, puede pasar a alguno de los siguientes.

Estado 3: versión CADUCADA

Sucede cuando la versión instalada tiene un número limitado de ejecuciones, o


una fecha límite de utilización. Entonces pasa a ser una versión de evaluación
(estado 1).

Estado 4: versión DESINSTALADA

Encontramos este estado cuando la protección de licencia es mediante


disquete, y hemos devuelto la licencia al disquete. El programa queda igual que
en modo evaluación (estado 1).

Estado 5: versión NO REGISTRADA

Significa que el programa tiene permisos instalados con un número de

Ventanas del programa / 274


licencia, pero que es el número es erróneo, ilegal o se ha producido un error en
la máquina. Intente solucionar el problema con los pasos del tema Instalación y
solución de problemas

IM PORTANTE: Si se desea cambiar la ubicación del programa —por ejemplo, si


quiere instalarlo en un ordenador o disco físico distinto del inicial—, o realizar
alguna otra operación con la licencia del programa, lea el tema Instalación y solución
de problemas que le guiará en el proceso.

Pestaña Directorios:
La serie de botones muestran el directorio al que hacen referencia, y permiten
cambiar cada directorio. Pulsando el propio botón en algunos casos, podemos navegar
para introducir un directorio nuevo o realizar operaciones especiales relacionadas
con los directorios. Cada botón lleva un nombre y una descripción sobre la función del
directorio.

En una instalación monousuario o servidora normal, lo habitual es que todos los


botones de directorios se refieran al mismo, por lo que habrá rotulado uno en
Directorio PÚBLICO y los demás tendrán un guión (-) indicando que son el mismo
(pero tenemos la posibilidad de que todos sean distintos):

Directorio PÚBLICO
Por defecto, el programa guarda en el registro de Windows un directorio base que se
especifica en el momento de hacer la instalación servidora, por lo que no se puede
cambiar. Para hacer una instalación en red, por lo menos debe existir UNA
instalación servidora a la que hacer referencia.

Menú Herramientas / 275


En este directorio se almacenan los subdirectorios que contienen la ayuda,
ejemplos, ventanas, informes, gráficos, etc. Es el directorio raíz de aplicación
servidora al que se refieren las instalaciones cliente. Recuerde que este directorio
no tiene porqué ser el que muestren los diálogos estándar como abrir, copiar,...

Directorio PRIVADO
El directorio privado determina de dónde se toman los datos particulares de una
instalación cliente (datos particulares como el archivo .INI, el directorio de
informes, gráficos, los archivos .LEN de lenguaje, y otros, que se tomarán de este
directorio SI EXISTEN, en lugar de leer los del directorio público.

La definición de este directorio se hace utilizando el parámetro "dir=" de línea de


comandos en el acceso directo al programa. La instalación en múltiples puestos la
podemos ir haciendo copiando estos accesos directos por todos los puestos de la red
que queramos.

Alcance del directorio privado:

En el directorio privado, cada instalación cliente tendrá sólo ciertos archivos de


una instalación servidora: acceso directo al programa, su archivo de
configuración personal .INI y los archivos de estado en los directorios que se
quieran utilizar de forma privada: \INFORMES, \VENTANAS, \MACROS, etc

El directorio a utilizar se selecciona mediante el siguiente criterio: Si existe el


directorio Privado, se utiliza el archivo .INI y todos los subdirectorios que se
encuentren bajo él, ignorando los existentes en el directorio público. Sino —en
el caso concreto de los informes—, dentro del directorio público se busca el
archivo CARPETAS.PRG dentro del directorio \INFORMES; si se encuentra, se
toma ese como directorio de informes y configuraciones .CNI, y sino se busca el
subdirectorio \ESTÁNDAR.

Si no se especifica un directorio privado, los directorios público y privado


coinciden; ésta es la situación de defecto cuando se ha realizado una
instalación servidora monousuario. En este caso, al abrir, copiar, guardar
archivos, no se crean accesos directos a los directorios visitados.

Directorio de PERMISOS
Hace referencia al archivo <nombre_aplicación>.DLL que contiene la protección
anti-copia (si estamos utilizando el sistema de protección de disquete), o el
archivo M OTOR.NIC (si estamos utilizando la licencia mediante clave). En una
instalación servidora, los permisos se instalan en el mismo directorio que la
aplicación. En una instalación cliente, cada usuario ejecuta el archivo .EXE del
servidor y se encamina al archivo de permisos del servidor, pero podemos utilizar
más ágilmente el programa, si realizamos en cada puesto cliente una instalación
pesada (es decir, con el programa completo, como la instalación servidora), y
utilizamos SÓLO los permisos del servidor.

Ventanas del programa / 276


Directorio de SEGURIDAD
En este caso se busca y se hace referencia al archivo M OTOR.DAT donde se
almacenan los grupos de usuarios y los permisos de cada grupo. En cualquier
momento podemos hacer una copia de seguridad o seleccionar otro archivo de
permisos (mediante el diálogo estándar que nos permite navegar por los directorios
para elegir otro).

Cada archivo de base de datos lleva asociado un archivo de grupos de usuarios,


aunque lo normal es que el que se utilice en el programa (por defecto en el
directorio público) se vaya asociando a todas las bases de datos que vamos creando.

IM PORTANTE: un archivo de base de datos no se podrá abrir a menos que se


conozca uno de los usuarios (con su contraseña) del MOTOR.DAT correspondiente a
la base. Si perdemos el archivo de grupos de una base, (por ejemplo porque la
hayamos editado en un sitio, con unos ciertos usuarios dados de alta, y nos
hayamos llevado la base a otro lugar, donde trabajamos con otros), NO PODREMOS
ABRIR la base y habremos perdido todos los datos.

Por eso es importante siempre que editamos una base y hacemos copia de
seguridad de ella, hacer al mismo tiempo una copia del archivo MOTOR.DAT, y una
buena medida para ello es copiar ese archivo a un Directorio de trabajo, y
redireccionar el camino mediante este botón.

Muestra un diálogo de confirmación para verificar que


queremos introducir en el "Registry" de Windows el camino de la aplicación actual, el
nombre del programa, asociarlo a la extensión correspondiente, etc. Tiene su utilidad
principalmente para registrar la aplicación en el sistema, si por ejemplo, se ha
copiado manualmente a otro directorio, se ha cambiado el nombre del directorio o
bien tiene más de una versión instalada.

Pestaña Copias de Seguridad:


Una de las novedades de Menfis 8 con respecto a su antecesor Menfis 7 es la
posibilidad de realizar copias de seguridad automáticas. Dentro de esta pestaña
encontramos lo necesario para gestionar dichas copias.

Menú Herramientas / 277


Teniendo marcada la casilla Realizar copias de seguridad automáticas vamos
obteniendo copias del archivo de trabajo con el intervalo de tiempo que hayamos
descrito en el campo de edición M inutos de intervalo entre cada copia de
seguridad.

El número máximo de copias de seguridad debemos definirlo en el campo de edición


habilitado para tal efecto.

Estas copias se llevarán a cabo en formato .MEN siempre y cuando no tengamos


marcada la casilla Copias comprimidas, en cuyo caso obtendríamos dichas copias en
formato .MEZ.

Abre un ventana de diálogo estándar en la que


seleccionaremos la carpeta de destino de nuestras copias de seguridad.

Guarda una copia del archivo actual de trabajo en el


directorio definido a tal efecto. Es especialmente útil cuando no se tiene marcada la
opción de Realizar copias de seguridad automáticas.

Una vez creada la copia de seguridad, de forma manual, se nos mostrará el siguiente
diálogo:

Ventanas del programa / 278


Menú Marcadores
Menú Marcadores
Los marcadores nos permiten guardar posiciones de la estructura de base de datos a la
manera del marca-páginas de un libro o los Favoritos de Windows. Para poder grabar un
marcador es necesario que el archivo esté en Edición, ya que cada marcador consiste
en un concepto que cuelga en la base de datos, de la carpeta "MARCADOR·Marcadores".

Este menú, si no tenemos permisos de Edición de la base de datos, puede mostrar una
lista de marcadores incluidos en la base de datos, pero no se permitirá administrarlos,
cambiarlos o añadir nuevos marcadores.

Graba marcador...: Nos permite añadir la posición actual en la base de datos —


mediante el camino completo para llegar hasta él —, con un nombre (en el diálogo se
sugiere el nombre que hay en el campo Resumen del concepto seleccionado).

El marcador se añade en último lugar a la lista de conceptos y aparece como una


nueva entrada en este menú.

Menú Marcadores / 279


Organiza marcadores...: Realiza la búsqueda de la carpeta "MARCADOR" (que se
encuentra en la base de datos, descolgada de la estructura) y muestra sus
descendientes para que podamos cambiar el nombre descriptivo, el orden de
aparición en el menú, borrar marcadores, e incluso agregar nuevos manualmente,
ya que se trata de conceptos de Tipo Varios, que contienen el camino de búsqueda
en el campo Resumen.

Ventanas del programa / 280


Menú Ventanas
Menú Ventanas
Nos permite grabar en disco, como una configuración definida, la posición y tamaño de
cualquier conjunto de ventanas del programa. Una vez que estos datos están grabados
bajo un nombre de archivo que nosotros asignamos, podemos recuperarlos
seleccionando dicho nombre en el menú desplegable.

Graba ventanas...: Muestra un diálogo estándar que nos pide un nombre con el que
designar el estado actual de las ventanas que en ese momento estén abiertas. El
campo de entrada nos permite teclear nombres largos para grabar un archivo en el
directorio \VENTANAS correspondiente a la resolución de pantalla que tengamos
seleccionada en Windows.

Menú Ventanas / 281


En el diálogo estándar NO se permite cambiar a ningún otro directorio que no sea el
propio de la resolución de pantalla actual. La selección entre los subdirectorios de
resoluciones la hace la aplicación automáticamente, cogiendo la adecuada, y
creando el directorio en caso de que no exista.

Con el programa se distribuyen las configuraciones de ventanas más habituales, en


cuatro resoluciones de pantalla: 1280x1024, 1024x768, 800x600 y 640x480

M odo graba al salir: Es un modo que podemos activar o desactivar. Cuando esta
opción está activa, al ejecutar Archivo > Fin Programa se graba el estado de todas las
ventanas en el archivo defecto.mac que se muestra como la opción de menú Estado
Inicio—, y cuando se arranca de nuevo se recupera el mismo. No ocurre lo mismo al
cerrar sólo la ventana o pulsar Archivo > Cierra ventana.

M odo recuerda: Si está activada, en sesiones posteriores, las ventanas ya no se


abrirán con el tamaño y posición por defecto, sino como y donde las dejamos por
última vez.

Ajusta a pantalla: Permite aprovechar al máximo el monitor para representar todas


las ventanas abiertas actualmente, de forma que con sólo aproximarlas en tamaño a
los bordes y entre si, dándoles la forma de mosaico que queramos, automáticamente
ajusta hasta dejarlas borde con borde.

Se distribuyen 3 estado fijos predefinidos de ventanas (Estado Inicio , Estado1 y


Estado2 ) y además algún otro —dependiendo de la resolución —, que incluye
búsquedas, ventanas paralelas, de propiedades, etc.

Avanzado:

Las configuraciones que se distribuyen por defecto llevan un nombre detrás de la clave
TIT, además de mostrar el nombre de archivo a la derecha del rótulo. Si no se
encuentra la clave TIT, se pone el nombre de archivo como nombre de la configuración
de ventanas.

Ventanas del programa / 282


Dentro del archivo .MAC de datos que guarda la configuración, encontramos una línea
por cada posición y tamaño de ventana guardado, con una clave que identifica la
ventana y si es de la ventana principal1 o de la 2 (el paralelo). Por ejemplo:

VEN 1 TES 554 465 598 148 representa la ventana tesauro (TES) del paralelo (1) y sus
coordenadas

Menú Ventanas / 283


Menú Ayuda
Menú Ayuda
Da acceso a varios temas centrales de la estructura de ayuda. Al pulsar cualquiera de
las opciones se abre la ventana de ayuda, si no estuviera abierta, y se visualiza el texto
definido por cada opción en ella.

Contenido de la ayuda...: Presenta el índice y la tabla de contenidos de la ayuda, que


nos permite buscar temas mediante el árbol o por palabras sueltas. La estructura se
corresponde con el orden de opciones y de menús en la ventana principal del
programa.

En Ventana...: Presenta el tema que contiene todos los campos y controles de la


ventana Principal, así como enlaces a los temas principales.

En Teclas...: Presenta el tema Uso del teclado.

En Versión...: Se muestra un historial de las distintas versiones, hasta la actual,


con las novedades, correcciones, mejoras, etc.

Tutorial...: Abre el archivo con una guía rápida de uso del programa o un tutorial
completo, como el que se ofrece impreso para aprender a manejar la aplicación paso
a paso. El archivo es de tipo .PDF y tiene el mismo nombre que el programa.

Últimas noticias...: Es un enlace a la sección de Menfis, ubicada en la pagina web de


Professional Software, para que pueda obtener información de última hora sobre las
novedades del programa.

Solicitar soporte técnico...: Nos lleva a través de nuestro navegador predeterminado


a la pagina web de Professional Software dónde podremos elegir entre el tipo de
soporte que queremos recibir: Telefónico o vía web.

M ostrar consejos de utilización...: Abre una ventana a través de la cual podemos


obtener ayuda rápida sobre los conceptos más básicos de Menfis, así como pequeñas
sugerencias sobre el uso de las distintas aplicaciones del programa.

Menú Ayuda / 285


Algunos de los consejos tiene vínculos a las paginas de la ayuda donde se encuentra
información más detallada sobre el tema que se expone. Existe la posibilidad de que
se nos muestren cada vez que iniciemos del programa. Para ello tenemos que tener
marcada la casilla M ostrar al iniciar M enfis.

Comprobar actualizaciones. Ejecuta el actualizador online para comprobar si


existen actualizaciones pendientes.

Acerca de...: Muestra un diálogo informativo del número de licencia instalada,


permisos, y direcciones comerciales de la empresa y distribuidor. Así como vínculos
tanto a la página web de Professional Software como a nuestro correo donde puede
dirigirse a nosotros para cualquier duda o recibir información útil sobre nuestro
software.

Ventanas del programa / 286


Diálogos de importancia
La Calculadora
Para abrir este diálogo modal, pulsamos la tecla F9 -siempre que estemos en modo
Edición- en cualquier campo de entrada numérico o alfanumérico al pie de una lista, en
cualquier ventana.

Contiene una línea en la que se pueden introducir expresiones que operen con los
datos que se encuentran dentro de los campos, o transcribir el total de la operación
efectuada, para múltiples líneas de la lista. El texto que aparece en la ventana es:

El campo reconoce tres partes diferenciadas; la primera especifica un operador que nos
dará la forma que afecta la línea de comandos al campo activo; se admiten seis
operadores: suma, producto, diferencia, división, exponente y asignación. Estos
operadores se pueden aplicar a una variable llamada ‘a’ que representa el valor del
campo actual, e ‘i’ que representa el número de la línea actual.

La segunda parte nos permite escribir cualquier expresión numérica que unida al
operador anterior nos dará el total que nos aparecerá en el campo activo.

Diálogos de importancia / 287


En estas expresiones se pueden utilizar los siguientes operadores y funciones:

Operadores aritméticos Operadores lógicos

+ adición ! negación
- sustracción y Y & && función AND, producto lógico
* producto o O | || función OR, suma lógica
/ división == igual
^ exponenciación != <> distinto
(potencia) <= =< menor o igual
= asignación >= => mayor o igual
< menor
> mayor

Funciones
IM PORTANTE: Los parámetros de las funciones van separados por el carácter punto y
coma ’;’ sin espacios en blanco en la calculadora (siempre que se tenga configurado
Windows como castellano), y separados por comas ‘,’ sin espacios en blanco cuando se
utilizan en el lenguaje de programación de informes JavaScript

Lo que llamamos expresión regular puede contener los siguientes comodines: '?'
cualquier carácter, '*' cualquier número de caracteres (al principio, en medio o al
final), '[...]' cualquier carácter dentro de los corchetes, la lista dentro de los corchetes
admite rangos '[...-...]' y negación '[!...]'.

año (fec) devuelve las dos últimas cifras del año de una fecha fec

devuelve el año de una fecha fec en formato largo de cuatro


añol (fec)
dígitos

el número real cuya representación, como cadena de


atof (cad)
caracteres, es cad

el número entero cuya representación, como cadena de


atoi (cad)
caracteres, es cad

ceil (val) redondeo por exceso de val

dia (fec) recupera el día de una fecha fec con formato estándar

recupera el nombre del día de la semana de una fecha fec


dial (fec)
con formato estándar

div (x; y) división entera de x/y

devuelve en formato cadena, la fecha fec que se le pasa con


fec2str (fec [;for]) formato de fecha estándar (AAAAMMDD), representada
opcionalmente con la máscara de formato for. P.ej. fec2str

Ventanas del programa / 288


(fin;"dd mm-aa") representaría la fecha de finalización
como 01 03-99. Por defecto, si no se pone ninguno, el
formato es el definido en el campo Formato de fechas.

devuelve una fecha fec completa con datos parciales, una


fecha incompleta, con la opción o que completa días y
meses en fechas incompletas con los valores: (1) completa
fecha (dia];mes];año; con el primer día y mes, (2) completa con último día y/o
[o) último mes.
Ejemplos: fecha (0,0,98,1) devuelve la fecha 19980101 que
formateada como cadena será 01/01/98, y fecha
(0,2,1996,2) devuelve 29/02/96

devuelve la fecha fec incrementada o decrementada en d


días, m meses y a años (sumando días y meses como en el
calendario y empezando por los días). Por ejemplo: fecmas
fecmas (fec; d; m; a) (str2fec (19960201);0;1;-2) da como resultado la fecha (no la
cadena) 01/03/94.
Hay que usar str2fec () porque el parámetro es una fecha,
no una cadena de caracteres.

floor (val) parte entera de val (redondeo por defecto)

fmod (x; y) resto de la división de los dos números en coma flotante

convierte un número real val a texto, puede tener un

segundo parámetro para definir con qué número de


ftoa (val; [dec; [tam)
decimales y un tercero para el tamaño del texto en número

de caracteres

convierte un número entero val a texto, puede tener un


itoa (val [;tam])
segundo parámetro para definir el tamaño de texto

len (cad) longitud de una cadena de caracteres

valor máximo de entre todos los valores numéricos que se


max (a; b; c; ...)
pasen como parámetro

mes (fec) devuelve el mes en número de una fecha fec

devuelve una cadena con el nombre del mes, capitalizado,

de una fecha fec en formato estándar. Si el parámetro es


mesl (fec|num)
un número del 1 al 12, en vez de una fecha, devuelve el

nombre de ese número de mes

Diálogos de importancia / 289


media aritmética calculada con todos los valores pasados
med (a; b; c; ...)
como parámetro

como med (), devuelve el valor de la media aritmética, pero


med0 (a; b; c; ...)
calculada sin tener en cuenta los elementos que son cero

min (a; b; c; ...) valor mínimo de todos los valores pasados como parámetro

valor mínimo de entre todos los valores, como min (), pero
min0 (a; b; c; ...) sin tener en cuenta los elementos que son cero (que
siempre son los primeros)

mod (x; y) resto de la división entera de x e y

red (val; dec) el número val redondeado a dec cifras significativas

obtiene de la cadena de caracteres cad, la subcadena que


str (cad; i; n)
comienza en la posición i y tiene n caracteres

convierte la cadena numérica cad con formato de fecha, en

str2fec (cad) formato real de tipo fecha (un número con formato

AAAAMMDD)

devuelve la cadena cad con la primera aparición de la

cadena de origen co sustituida por la cadena destino cd. Si


sus (cad; co; cd [;tod])
el parámetro tod=1 se sustituyen todas las apariciones en

la cadena, no sólo la primera.

Funciones matemáticas de menos utilización


Además de funciones para manejo de fechas y cadenas, y las funciones matemáticas
más corrientes, hay otras trigonométricas y de menor uso:

abs (x) valor absoluto de x

acos (x) arco coseno de x en grados sexagesimales

asin (x) arco seno de x en grados sexagesimales

atan (x) arco tangente de x en grados sexagesimales

atan2 (x; y) arco tangente (en cualquier cuadrante) de la línea que une el
punto (x; y) con el origen
cos (x) coseno de x (grados sexagesimales)

exp (x) el número e elevado a x (e es la base de los logaritmos naturales)

ln (x) logaritmo neperiano

Ventanas del programa / 290


log (x) logaritmo decimal de x

sin (x) seno de x (grados sexagesimales)

sqrt (x) raíz cuadrada de x

tan (x) tangente de x (grados sexagesimales)

Todos los términos mencionados en este tema, se utilizan en:

Lenguaje de programación de informes

Ventana Calculadora, en los campos de edición.

En los lenguajes de programación se utilizan como variables los siguientes


caracteres permitidos: El guión subrayado _ , el punto ., los caracteres desde la A
hasta la Z, en mayúsculas y minúsculas, incluida la ñ, los diacríticos y el signo dólar
$.

La tercera parte, separada con un blanco de la anterior, nos indicará el número de


líneas a las que la expresión en ese campo afectará, incluyendo la actual.

Se pueden operar fechas, tratándolas como si fuesen números (en sus dos formatos
internos: DDMMAA ó AAAAMMDD) o mejor aún, con la función de suma y resta de
fechas fecmas(). Ésta posibilidad es muy útil cuando se trata de cambiar una serie
muy grande de fechas de forma automática, por ejemplo, poniendo en la calculadora
“10”+i+”97” 8 pondrá en las ocho líneas de concepto siguientes a la actualmente
seleccionada (si son las únicas que se muestran en pantalla), fechas desde el
10/01/97 al 10/08/97. También se puede operar en campos alfanuméricos (código,
resumen, ...) para de la misma forma, modificar o introducir datos masivamente.

Se pueden realizar operaciones masivas de sustitución de códigos mediante el


formato de series explicado en los campos de edición: con el formato "00A1++" 100
situado en la primera línea de una lista de conceptos, tomará el primer código libre
de la serie 00A1 y los irá incrementando en uno, cambiando las 100 líneas
siguientes a la actualmente seleccionada.

Se pueden “limpiar” los campos de fechas de 10 líneas con la expresión: “” 10, y los
campos numéricos de importes, mediciones, etc. con “” 10 o 0 10 (ambas son
válidas).

También hay una forma de acceder a la información que contiene cualquiera de los
campos visibles de la pantalla, desde la calculadora. Las variables a1, a2, a3, etc. y
a_1, a_2, a_3, etc. hacen referencia a los contenidos de los tres primeros campos por
la derecha y por la izquierda, respectivamente, al campo en que nos encontremos
actualmente.

A este efecto, sólo se tienen en cuenta los campos visibles —tengan edición o no—,
así que por ejemplo, si tenemos en pantalla mostrados los campos: Código, Ud.
resumen, precio, fecha, medición, subtotal. Si nos situamos con la calculadora en el
campo precio, el contenido de la misma línea de concepto en el campo medición se
puede referenciar como ‘a2’ y el de código como ‘a_3’.

El criterio "inteligente" que sigue la aplicación, es que cualquier campo referenciado

Diálogos de importancia / 291


con 'a', 'a1', 'a_1' etc. que se utilice con las funciones str() y sus() o que se operen con
una cadena entre comillas " ", se toma como campo alfanumérico (es decir que por
ejemplo, la suma concatenaría en vez de devolver la suma aritmética).

Nos devolverá a la ventana del campo activo, donde aparecerá el total


hallado entre la ventana Calculadora y el valor que contenía dicho campo.

Es otra de las novedades de Menfis 8 con respecto a sus antecesores.


Aplica la función elegida solamente sobre los elementos seleccionados. Entre
paréntesis se nos muestra el número de conceptos seleccionados a los que afectarán
los cálculos.

Diálogo selección de conceptos


Puede aparecer en varias ventanas del programa: la Principal cuando se introduce
algún carácter con una máscara de búsqueda en el campo de edición de la columna
Código o Resumen (para ver todos los conceptos posibles basta con poner ‘*’).

En caso de haber un sólo Tipo o Clase de concepto que coincida con la máscara o código
que se ha puesto, no se muestra la lista de selección sino que se da de alta
directamente el concepto.

O el doble clic con el ratón sobre uno de los conceptos, lo pone en la


ventana en la que estemos introduciendo datos.

Diálogo selección de informes


Este diálogo modal (no se puede utilizar ninguna otra ventana del programa hasta que
no se cierre esta), aparece al pulsar el botón Imprime de la barra de botones que hay en

Ventanas del programa / 292


casi todas las ventanas de propiedades. No se puede acceder a ninguna otra parte del
programa hasta que se cierra esta ventana.

Pestaña selección de informes


Los informes de impresión rápida, tienen formatos especiales de ficha para cada tipo
de concepto o dependiendo de su código, etc. e imprimen los datos relacionados con el
concepto actualmente seleccionado. Si hubiese una serie de archivos con el mismo
nombre, terminados en un índice, se nos muestra una lista con todos ellos, para
seleccionar el deseado en cada momento.

Estos informes siempre se buscan en el directorio o índice de informes seleccionado


actualmente, y en caso de no encontrarse allí, no se muestra ninguno.

, , y son
totalmente equivalentes a los cuatro tipos de salida de la ventana informes y
procedimientos: Permiten respectivamente, mostrar la salida en pantalla, papel, un
archivo ejecutable que contiene y permite visualizar e imprimir, o bien un archivo
RTF de texto rico (con negrita, subrayados, distintos tipos de letra, colores, etc.)

Abre el diálogo de configuración igual que en la ventana


informes y procedimientos.

Si hacemos doble clic con el ratón sobre uno de los informes de la lista (o pulsamos
INTRO, que es equivalente), la opción por defecto es la salida hacia Preliminar.

En función de la ventana de propiedades en la que nos encontremos, se seleccionan


los informes a mostrar, con el siguiente criterio: nombre de tabla, tipo y clase. Por
ejemplo, al seleccionar un concepto de clase Entidad-Proveedor, se nos mostraran los
informes con el prefijo "con" por pertenecer a la tabla de conceptos, los que tengan
"ent" por el tipo entidad y los que tengan "prv" por ser clase proveedor.

Por otro lado, otras ventanas tiene su propia serie de informes como por ejemplo, la
ventana Gráficos muestra los informes cuyo nombre comienza con "gra", la de
Términos los que comienzan con "ter", y así.

Si el concepto actual no cumple ninguna de esas condiciones, no se muestra ningún


informe que lanzar como actual.

Pestaña Parámetros del informe


Equivale a la ventana Parámetros accesible desde el botón Parámetros de la ventana
informes y procedimientos, y es contextual al informe seleccionado en la pestaña
anterior. Funciona exactamente igual que aquella.

Diálogos de importancia / 293


Pestaña Parámetros temporales
Equivale a la sección de campos de entrada de la ventana informes y procedimientos
explicados en el tema de programación de informes. Podemos poner para cada
informe, una fecha, página inicial, número de paginación inicial, etc.

Diálogo Borrar concepto


Hay dos tipos de diálogos de advertencia que pueden aparecer cuando pulsamos
ALT+SUPRIMIR estando en los campos de edición o directamente SUPR si tenemos una
línea seleccionada en lista de conceptos o de relaciones de la ventana de principal.

A. Cuando vemos una lista de relaciones jerárquica o mediante algún criterio de


búsqueda, Y EL CONCEPTO O RELACIÓN SE ENCUENTRA EN MÁS DE UN SITIO, no
se da ningún aviso, porque no se pierde más que la información de la relación
actual.

B. Si se trata de un concepto o relación que solamente aparece en la estructura en el


punto que estamos intentando eliminar, se nos dan dos posibilidades:

Elimina la relación actual, es decir, descuelga el concepto y sus hijos, del


padre actual, pero la estructura inferior a él, y todos los datos quedan en la base de
datos.

Borra el concepto y todas sus referencias.

C. Pero si no se trata de una relación, sino de un concepto, la función permite


eliminar completamente el concepto y todas sus referencias del archivo.
Eliminando una relación, recordemos que no se eliminan los datos del concepto
relacionado, sino que queda "suelto" en la base de datos.

Ventanas del programa / 294


Destruye el concepto y todos sus datos de propiedades, sin
posibilidad de volver a recuperarlos.

D. Cuando se trata de varias relaciones seleccionadas, y no una sola, se nos muestra


el diálogo:

Elimina la relación actual.

Borra el concepto.

E. Si se trata de varios conceptos, simplemente pide confirmación:

En los dos últimos casos se muestra un diálogo de interrupción para poder pasar el
proceso en caso de ser muy largo.

Diálogo Cambio de icono


Muestra una lista de todos los pequeños dibujos de 32x32 puntos que hay en el archivo
icotip32.bmp del directorio \GRÁFICOS. Aparece al pulsar una de las siguientes
opciones:

a. La opción Concepto > Concepto actual > Cambio de icono... teniendo seleccionados
uno o varios conceptos en la ventana principal

b. El mismo botón de la ventana Tipos de conceptos (dependiendo del estado del


conmutador 32x32 de esa ventana, se mostrarán los iconos grandes o pequeños, pero
los mismos)

c. El mismo botón en la ventana Características, sólo que éste accede a un archivo


particular de iconos llamado icocar16.bmp, que tiene iconos de tamaño 16x16
puntos, sin versión grande, y además están diseñados en un tamaño de unos 8 o 9

Diálogos de importancia / 295


puntos por cada lado (para que no se peguen cuando están muy juntos)

El doble clic sobre uno de los iconos que aparece en el diálogo, o la pulsación del botón
Acepta, supone un cambio del icono actualmente seleccionado, que puede tener varios
ámbitos:

1. Si se modifica seleccionando un concepto en la ventana principal, cuando


ejecutamos la opción A/, se modifica sólo el icono del concepto actual (o de
los que estén multiseleccionados).

2. Si se modifica con B/, se cambia el icono de la capa, y por tanto el de todos


los conceptos asociados a esa capa, que no tengan un icono individualizado con
A/

3. Si se modifica con C/, se cambia globalmente el icono de Tipo en la base de


datos, y cambian todos los conceptos de ese Tipo que tengamos en la base de
datos, que no tengan definido algún icono particular con A/ o B/

Si no se desea cambiar el icono inicial de defecto de un tipo (es decir, anular cualquier
selección), basta con pulsar en uno de los espacios entre los iconos. Se mostrará el que
tenía inicialmente.

Para usuarios avanzados


Aunque el archivo icotip32.bmp contiene más de 1.000 iconos, que en general son
suficientes para asignar a cualquier concepto, este archivo se puede modificar para
cambiar los iconos que contiene o bien añadirle más e incluso sustituirlo por otro
archivo .BMP que contenga nuestros iconos.

IM PORTANTE: Desde luego, se debe guardar aparte el archivo distribuido con el


programa, de forma que si hay algún problema al editar el archivo de iconos, podamos
restablecer los originales. Algunas consideraciones a tener en cuenta sobre el
archivo son:

1º Sólo se pueden usar los 16 colores del sistema. El color magenta (fucsia o rosa) se
toma como transparente

2º La medida de cada icono debe ser exactamente 32x32 puntos y estar todos
contiguos sin espacios

3º Se debe editar igualmente y con los mismos cambios, el archivo icotip16.bmp del
mismo directorio, que mantiene las versiones de los mismos iconos en tamaño
16x16 puntos (para las líneas pequeñas).

4º El gráfico completo debe tener un número par de filas y columnas de iconos

Lo mismo se aplica a la edición de los iconos de características del archivo icocar16.


bmp, y a icotra16.bmp, sólo que no hay que hacer una versión grande de los iconos.

Ventanas del programa / 296


Diálogo Cambio de tipo
Muestra los Tipos de conceptos que hay definidos en el programa (cada uno con sus
propiedades específicas), para poder asignar el deseado a cualquier concepto creado o
cambiar el Tipo o Clase de uno existente. Se puede utilizar en distintos sitios de la
aplicación:

a. La opción Concepto > Concepto actual > Cambio de tipo o clase... (que es el mismo
menú que se muestra pinchando con el botón derecho del ratón sobre el icono de
cualquier concepto), al tener seleccionado uno o varios conceptos en la ventana
principal

b. En el diálogo de Nuevo concepto, siempre se puede cambiar el tipo y clase


propuestos.

Al cambiar el Tipo de un concepto existente, aparece el diálogo de confirmación:

Ya que, aunque asociaciones de información como el texto, los gráficos, etc. se


mantiene aunque cambiemos de tipo, la información de campos y relaciones propias
EXCLUSIVAMENTE de ese tipo se perderán.

c. Por otro lado, el botón Tipo de la ventana Características, o TyC de la ventana


Valores, o el botón Asocia a Tipo de la ventana de propiedades de carpetas, así como
cualquiera de este estilo, nos permite decidir si queremos asignar un tipo·clase en
concreto para cada condición de búsqueda o clase de valor, etc. de la ventana.

El doble clic sobre una de las líneas que aparece en el diálogo, es equivalente a la
pulsación del botón Si para realizar el cambio.

Diálogo Nuevo Concepto


Permite crear conceptos nuevos en la base de datos, ofreciendo al mismo tiempo
algunas facilidades para crear series o introducir copias de ciertos datos. Hay que
distinguir dos casos:

Ventanas de propiedades:

Si este diálogo se muestra desde el botón Nuevo de cualquiera de las ventanas de


propiedades, todos los Tipos admiten como entrada una Fecha (que por defecto es la
actual, para no tener que preocuparse de teclearla), el Código y Resumen del concepto.
El campo Código siempre sugiere uno, con el criterio de que es el posterior al último

Diálogos de importancia / 297


código utilizado de ese Tipo -en orden alfanumérico-, y añadiendo un número detrás si
no termina en número.

Por ejemplo:
MOOA.1a -> MOOA.1a1

MOOA.1a -> MOOA.1a2 (ya existe el anterior)

MMMA10 -> MMMA11

Al tener como referencia una ventana de Propiedades, tomamos como referencia la


serie de códigos de ESE Tipo, y también se nos sugiere el mismo Resumen. Para
funcionar de forma coherente, la ventana de propiedades se "desconecta" (no está
asociada a ningún concepto en concreto) y se seleccionan en la ventana principal todos
los conceptos creados.

Que al abrir la ventana siempre muestra el rótulo Nº 1, sirve para


crear una serie de conceptos iguales con los códigos consecutivos.

Aparece solamente cuando queremos crear nuevos conceptos desde


el botón Nuevo de las ventanas de propiedades, porque permite copiar todas las
propiedades del concepto actual en todos los conceptos nuevos (si hemos puesto más de
uno). Los datos de propiedades se copiarán según los modos activos en la ventana Modos
Traslada. El concepto del que se copiarán las propiedades, se muestra en la línea
superior a la barra de botones.

Ventanas del programa / 298


Podemos crear el concepto ya relacionado directamente en la
descomposición que tenemos actualmente en ventana principal.

Permite seleccionar directamente la Clase del concepto a crear, por


si fuese del mismo Tipo que la ventana de propiedades de la que hemos partido, pero de
otra Clase. Y también podemos cambiar de Clase. El diálogo de selección de Tipo y Clase
se muestra con el Tipo actual seleccionado para acceder más fácilmente a las Clases.

M enú concepto y ventana principal:

Si el diálogo se muestra desde las opciones del submenú Propiedades del menú
Concepto, o al teclear un código nuevo en el campo de edición de la ventana principal,
se sugiere el siguiente al último que hayamos creado, ya que no se tiene una
referencia actual.

Creando conceptos de estas formas, no tenemos la posibilidad de copiar propiedades. La


autonumeración propuesta (si no existen códigos del mismo Tipo o Clase), suele ser el
nombre de tabla, seguido de un número secuencial, como ENT0001, en el caso de
Entidades.

Diálogo Selector de campos


Se abre el diálogo selector de campos al seleccionar la opción correspondiente en el
menú de cabecera de lista. Este diálogo es independiente de la columna de la lista para
la que se desplegó el menú, ya que siempre muestra la lista de posibles columnas a
mostrar/ocultar en la lista.

Diálogos de importancia / 299


Al desactivar el conmutador que acompaña a la descripción de la columna, dicha
columna desaparece de la lista, al volverlo a activar la columna vuelve a aparecer.

Muestra en la lista las columnas que la aplicación muestra


cuando se consulta la lista por primera vez.

Ventana del actualizador


Permite actualizar la versión de Menfis a través de internet. Accesible desde el menú
Ayuda..., Esta ventana, comprueba si existen versiones superiores a la actualmente
instalada. Esta ventana consta de 3 partes:

Ventanas del programa / 300


En la parte superior se muestra la versión actualmente instalada en el equipo.

En la parte central se muestra la información referente al estado de las actualizaciones. T ambién,


cuenta con un botón central que cambia de estado en función de la disponibilidad o no de
actualizaciones.

Se muestra si existe alguna actualización disponible, a su vez un mensaje


nos informará de ello y nos preguntará si queremos descargarla. P ara descargarla hay que pinchar
sobre dicho botón.

Se muestra una vez descargada la actualización. a su vez un texto nos


informará de que se dispone de la actualización y nos preguntará si la queremos instalar. P ara proceder
a la instalación hay que pinchar sobre dicho botón. A continuación aparecerá un mensaje de
confirmación de la instalación como el que vemos a continuación:

P ara confirmar la actualización hay que pinchar sobre el botón Sí, para abortar el proceso hay que
seleccionar el botón No.

Se muestra siempre inactivo y nos indica que se ha hecho la


comprobación necesaria y no se han encontrado actualizaciones disponibles para este equipo.

La tercera parte de la ventana sirve para establecer el momento en que se comprobará si existe o no
alguna actualización disponible. P or defecto el actualizador realiza esta comprobación al iniciar la
sesión , pero existen diferentes opciones que se muestran a continuación:

Diálogos de importancia / 301


Ventanas del programa / 302
Introducción al lenguaje SQL
Contenidos
El lenguaje SQL

Notación empleada en los formatos

Sentencia de selección o consulta

Cláusula SELECT

Funciones de agrupamiento

Cláusula FROM

Cláusula WHERE

Cláusula GROUP BY

Cláusula HAVING

Operador UNION

Cláusula ORDER BY

Combinación de tablas

Alias de las tablas

SELECT anidadas

Expresiones SQL

Nombres de campos

Constantes

Operadores Numéricos

Operadores de caracteres

Operadores de fechas

Operadores de relación

Introducción al lenguaje SQL / 303


Operadores Lógicos

Prioridad de los operadores

Sentencia INSERT

Sentencia UPDATE

Sentencia DELETE

Sólo como referencia (sin uso en la aplicación):

Sentencias para crear o destruir tablas

Transacciones

El lenguaje SQL
SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en
una base de datos relacional. El nombre "SQL" es una abreviatura de Structured
Query Language (Lenguaje de consultas estructurado).

Su aprendizaje no solo sirve para esta aplicación sino también, para todas las
existentes en el mercado que soporten este lenguaje ya que es un lenguaje estándar
consolidado por el Instituto Americano de Normas (ANSI) y por la Organización de
Estándares Internacional (ISO).

Notación empleada en la sintaxis


MAYÚSCULAS Las palabras que figuren en el formato en mayúsculas se escribirán
en la sentencia igual que se escriben en el formato.

Minúscula cursiva Estas palabras deberán ser sustituidas en la sentencia por


nombres o palabras elegidas por el usuario de acuerdo con las descripciones que se
den en cada caso

Barra vertical | Indicará la elección de una de las opciones que este separando. O
una u otra no ambas.

Corchetes [ ] Encerrarán elementos opciones de la sentencia que pueden cogerse o


no dependiendo del usuario.

Llaves { } Encerrarán elementos obligatorios de la sentencia que siempre deberán de


ser especificados.

Sentencia de selección o consulta


La sentencia SELECT recupera datos de una base de datos y devuelve como resultado
de la consulta un conjunto de registros. Consta de seis cláusulas: las dos primeras
(SELECT y FROM) obligatorias y las otras cuatro opcionales.

Sintaxis:
SELECT [DISTINCT] {* | expresión_columna, ...}

FROM nombretabla [alias_tabla] ...

[WHERE expresión1 operador expresion2]

[GROUP BY {expresión_columna, ...} ]

Anexo 1: SQL / 304


[HAVING {condición} ]

[UNION [ALL] (SELECT ...)]

[ORDER BY {expresión_orden [DESC | ASC], ... ]

Para realizar esta operación, el motor de base de datos busca la tabla o las tablas
especificadas, extrae las columnas elegidas, selecciona las filas que cumplen los
criterios y ordena o agrupa las filas resultantes en el orden especificado

Cláusula SELECT
La cláusula SELECT especifica los datos a recuperar: nombres de los campos que
contienen los datos a consultar, expresiones a calcular por SQL cuando efectúa la
consulta, o un asterisco (*) para seleccionar todos los campos de una tabla.

Si se incluye más de un campo, éstos se recuperan en el orden enumerado.

expresión_columna puede ser un simple nombre de campo (por ejemplo


MATRICULA). Expresiones más complejas pueden incluir operaciones matemáticas
o de manipulación de caracteres (por ejemplo APELLIDOS + ‘, ‘ + NOMBRE).

Las expresiones de columnas deben ir separadas por comas (por ejemplo APELLIDOS,
NOMBRE, DNI, DOMICILIO).

Los nombres de campos pueden ir precedidos por el nombre de la tabla o su alias. Por
ejemplo ALUMNOS.MATRICULA o A.MATRICULA donde A es el alias para la tabla
ALUMNOS.

El predicado DISTINCT, si se incluye, debe preceder la primera expresión de


columna. Este operador elimina las filas o registros duplicados del resultado de la
consulta. Por ejemplo la sentencia:

SELECT DISTINCT PROVINCIA FROM ALUMNOS

mostrará las distintas provincias de las que proceden los alumnos del Centro.

Funciones de agrupamiento

Las funciones de agrupamiento pueden ser también parte de una cláusula


SELECT. Devuelven un único valor de un conjunto de registros. Pueden usarse con
un nombre de campo (por ejemplo, AVG(NUMERO_DE_HERMANOS) o en
combinación con una expresión de columna más compleja (por ejemplo, AVG
(NUMERO_DE_HERMANOS * 1.07) ). La expresión de columna puede ir precedida por
el predicado DISTINCT. El operador DISTINCT eliminará los valores repetidos de
una expresión de agrupamiento. Por ejemplo,

SELECT COUNT(DISTINCT LOCALIDAD) FROM ALUMNOS

En este ejemplo, sólo aparecerán el nº de las distintas localidades donde residen los
alumnos.

Las funciones de agrupamiento permitidas son:

SUM Devuelve la suma total de los valores de una expresión de columna o


campo numérico.

Introducción al lenguaje SQL / 305


Por ejemplo, SUM(NUMERO_DE_HERMANOS) devolverá el total de hermanos de
los alumnos del Centro.

AVG Devuelve la media de los valores de una expresión de columna.

Por ejemplo, AVG(NUMERO_DE_HERMANOS) devolverá la media de hermanos


que posee el alumnado del centro.

COUNT Devuelve el número de valores en una expresión de columna.

Por ejemplo, COUNT(MATRICULA) devolverá el número de registros con valores


no nulos en el campo MATRICULA. COUNT(PAIS) nos dirá el número de
alumnos que en el campo país tiene alguna información y no está a blanco.

Un ejemplo especial es COUNT(*), que nos devuelve el número de registros


incluyendo aquellos registros con valores nulos.

MAX Devuelve el valor más alto de los contenidos en una expresión de


columna.

Por ejemplo, MAX(MATRICULA) devolverá el nº de matrícula mas elevado que


existe en el la tabla de alumnos.

MIN Devuelve el valor más bajo de los contenidos en una expresión de


columna.

Por ejemplo, SELECT MIN(FECHA_NACIMIENTO) FROM ALUMNOS nos devolverá


la fecha de nacimiento del alumno mas viejo del centro.

Cláusula FROM
La cláusula FROM identifica la tabla o tablas que contienen los campos con los datos
a recuperar por la consulta.

Sintaxis:

FROM nombretabla [alias_tabla] ...

nombretabla puede ser una o mas nombres de tabla separados por comas.

alias_tabla es un nombre que se usa para referirse a la tabla en el resto de la


sentencia SELECT, utilizado normalmente para abreviar el nombre original y
también para poder realizar consultas uniendo varias veces la misma tabla. Por
ejemplo,

SELECT A.NOMBRE, A.APELLIDOS FROM MATRICULA M, ALUMNOS A WHERE M.


MATRICULA = A.MATRICULA AND M.GRUPO = ‘1A’ AND ANNO = 1995

es mucho más práctico y sencillo que:

SELECT ALUMNOS.NOMBRE, ALUMNOS.APELLIDOS FROM MATRICUL, ALUMNOS


WHERE MATRICUL.MATRICULA = ALUMNO.MATRICULA AND MATRICUL.GRUPO =
‘1A’ AND ANNO = 1995

Las dos sentencias son idénticas y nos devolverían los nombres y apellidos del
alumnado matriculado en el año 1995 y que figuran en el grupo 1A. El nombre de

Anexo 1: SQL / 306


tablas junto al nombre de campo es obligatorio cuando existan campos con nombre
idéntico en las tablas que formen parte de la sentencia. Así en el ejemplo anterior
NOMBRE y APELLIDOS no lo necesitarían pero MATRICULA si lo necesita porque en
las dos tablas existe un campo con ese nombre.

Si no se pudiera utilizar alias, no se podría unir una tabla consigo misma y la


siguiente consulta no se podría llevar a cabo:

SELECT A.NOMBRE, A.APELLIDOS, H.NOMBRE FROM ALUMNOS A, ALUMNOS H


WHERE A.PADRE = H.PADRE

que nos devolverá el nombre de aquellos alumnos/as que tienen el mismo padre, es
decir, son hermanos.

Cláusula WHERE
La cláusula WHERE determina las condiciones que tienen que cumplir los registros
recuperados de la base de datos.

Sintaxis:

WHERE expresión

Donde expresión indica una condición que deben cumplir los registros para que se
incluyan en el resultado de la consulta. Puede ser cualquier combinación de
operadores, constantes, valores literales, funciones y nombres de campos que se
evalúen a un valor sencillo.

Por ejemplo, la siguiente sentencia nos muestra el nº de alumnos que han nacido
con posterioridad a 1985.

SELECT COUNT(*) FROM ALUMNOS WHERE YEAR(FECHA_NACIMIENTO) > 1985

Cláusula GROUP BY
Combina en un único registro los registros con valores idénticos en el campo o
campos especificados en la lista de campos que sigue a GROUP BY.

Sintaxis:

GROUP BY lista_de_campos

El siguiente ejemplo nos dice cuantos alumnos están matriculados en cada grupo en
el año 1995:

SELECT GRUPO, COUNT(*) FROM MATRICULA WHERE ANNO = 1995 GROUP BY


GRUPO

Esta sentencia nos devolverá una fila por cada grupo de alumnos. Cada una de ellas
contendrá el grupo y el nº de alumnos del grupo.

Cláusula HAVING
La cláusula HAVING especifica una condición aplicable a grupos obtenidos de la
aplicación de la cláusula GROUP BY. Sólo es válida si previamente se ha
especificado la cláusula GROUP BY.

Introducción al lenguaje SQL / 307


Sintaxis:

HAVING expresión

Siendo expresión el criterio que determina qué registros agrupados se van a


mostrar. No tiene que coincidir con una expresión de columna en la cláusula
SELECT.

La sentencia siguiente nos mostrará el número de alumnos en cada grupo de 1995


cuyo número de integrantes supera los 30:

SELECT GRUPO, COUNT(*) FROM MATRICULA WHERE ANNO = 1995 GROUP BY


GRUPO HAVING COUNT(*) > 30

Operador UNION
El operador UNION combina el resultado de dos sentencias SELECT en un único
resultado. Este resultado se compone de todos los registros devueltos en ambas
sentencias. Por defecto los registros repetidos se omiten, para que no se omitan se
empleará la palabra ALL.

Sintaxis:

SELECT sentencia UNION [ALL] SELECT sentencia

Cuando se utilice el operador UNION, la lista de selección para cada sentencia


SELECT debe tener el mismo número de expresiones de columnas con el mismo tipo
de datos y en el mismo orden. Por ejemplo,
SELECT APELLIDOS, NOMBRE FROM ALUMNOS

UNION

SELECT APELLIDOS, NOMBRE FROM PROFESOR

UNION

SELECT APELLIDOS, NOMBRE FROM PERSONAL

Este ejemplo tiene el mismo nº de columnas y cada columna en orden con el mismo
tipo de datos. Nos devolverá una lista única de alumnos, profesores y personal no
docente.

Cláusula ORDER BY
La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de
una o más columnas. Si se omite, los resultados saldrán ordenados por el primer
campo que sea clave en el índice que se haya utilizado.

Por tanto, indica como deben clasificarse los registros que se seleccionen. Tiene la
forma:

ORDER BY {expresión_orden [DESC | ASC], ... ]

expresión_orden puede ser el nombre de un campo, expresión o el número de


posición que ocupa la expresión de columna en la cláusula SELECT. Por defecto se
ordenan ASCendentemente (de menor a mayor). Si se deseará de mayor a menor se
empleará DESC (DESCendente). Por ejemplo, para mostrar los alumnos ordenados de

Anexo 1: SQL / 308


mayor edad a menor, se utilizaría:

SELECT NOMBRE, APELLIDOS FROM ALUMNOS ORDER BY FECHA_NACIMIENTO


DESC

Para obtener un listado de alumnos por su lugar de nacimiento ordenado por


provincias y dentro de cada provincia ordenados por localidades se utilizaría:

SELECT NOMBRE+’ ‘+APELLIDOS, LOCALIDAD_NACIMIENTO,


PROVINCIA_NACIMIENTO FROM ALUMNOS ORDER BY PROVINCIA, LOCALIDAD

o lo mismo de otra forma

SELECT NOMBRE+’ ‘+APELLIDOS, LOCALIDAD_NACIMIENTO,


PROVINCIA_NACIMIENTO FROM ALUMNOS ORDER BY 3, 2

Combinación de tablas
Los ejemplos vistos hasta el momento extraen datos de una única tabla. El enlace o
relación entre tablas para realizar una consulta, se conoce con el término de JOIN.

La operación JOIN combina registros de dos tablas siempre que existan valores
coincidentes en un campo común.

Existen tres tipos de combinaciones entre tablas: INNER JOIN, LEFT JOIN, RIGHT
JOIN

Si por ejemplo se quiere consultar en orden alfabético los Nombres y Apellidos de


todos los alumnos que están matriculados actualmente de forma Oficial en el centro
habría que relacionar la tabla ALUMNOS con la tabla MATRICULA. La tabla de
ALUMNOS contiene todos los datos generales del alumnado, entre ellos Nombre y
Apellidos, y la tabla MATRICULA los distintos datos de las diferentes matrículas de
cada uno de ellos, entre ellos el año y tipo de la matrícula.

Para extraer los datos hay que buscar un campo que contenga información común
en las dos tablas, es decir, aquel por el que están relacionadas ambas. Este campo es
el nº de expediente del alumno, que tiene el mismo nombre en las dos tablas:
MATRICULA y será este campo el que sirve para efectuar el JOIN:

SELECT APELLIDOS, NOMBRE FROM MATRICULA INNER JOIN ALUMNOS ON


MATRICUL.MATRICULA = ALUMNOS.MATRICULA WHERE ANNO = 1996 AND TIPO =
‘O’ ORDER BY APELLIDOS, NOMBRE

En este caso, el nº de expediente en las dos tablas debe existir y, si no es así, el


alumno/a no aparecerá en el resultado de la consulta.

La sintaxis resulta mucho mas sencilla si se utilizan alias para los nombres de las
tablas.

Alias de las Tablas


Los alias son un instrumento para abreviar los nombres de las tablas y poder
referirse a ellos en toda la sentencia. En el ejemplo anterior podríamos emplear
alias de la siguiente forma:>

SELECT APELLIDOS, NOMBRE FROM MATRICULA M INNER JOIN ALUMNOS ON M.

Introducción al lenguaje SQL / 309


MATRICULA = A.MATRICULA WHERE ANNO = 1996 AND TIPO = ‘O’ ORDER BY
APELLIDOS, NOMBRE

Los campos que tienen nombre único en las sentencias no necesitan ir precedidos
por el nombre de la tabla o su alias. En el ejemplo ANNO y TIPO solo existen en la
tabla MATRICULA y por esa razón no se les ha precedido por el nombre de la tabla o
por su alias.

La siguiente consulta retornará el conjunto de materias y los departamentos que las


imparten:

SELECT M.NOMBRE, D.NOMBRE FROM MATERIAS M INNER JOIN DEPARTAMENTOS


D ON M.DEPARTAMENTO = D.CLAVE

De esta forma solo se obtendrán las materias que tienen asignado departamento
que las imparta. Si deseamos una relación de todas las materias, incluidas aquella
en las que no figura el departamento que las imparte:

SELECT M.NOMBRE, D.NOMBRE FROM DEPARTAMENTOS D RIGHT JOIN MATERIAS


M ON D.CLAVE = M.DEPARTAMENTO

O bien

SELECT M.NOMBRE, D.NOMBRE FROM MATERIAS M LEFT JOIN DEPARTAMENTOS D


ON M.DEPARTAMENTO = D.CLAVE

SELECT anidadas
Se pueden existir consultas que requieran una restricción que sea el resultado de
otra consulta.

Por ejemplo: Deseamos saber cuantas materias posee el último curso de


'Introducción SQL' . Mediante COUNT(Materia) puedo saber cuantas pero la
condición del último curso solo se puede saber después de ejecutar una sentencia
SELECT MAX(Curso) de la tabla PLANES

Cuando esto se produce podemos actuar de dos formas:

La primera efectuando la consulta que genera la restricción y posteriormente,


realizar la sentencia con el resultado de la restricción calculada:

SELECT MAX(CURSO) FROM PLANES WHERE ESTUDIO = 'Introducción SQL’

Si, por ejemplo, el valor máximo nos devuelve 3, entonces realizaríamos la


sentencia definitiva con:

SELECT COUNT(MATERIA) FROM PLANES WHERE

ESTUDIO = 'Introducción SQL' AND CURSO = 3

La segunda forma es más compleja pero mucho más práctica. La sentencia


que genera la restricción compleja se anida dentro de la principal
encerrándola entre paréntesis:

SELECT COUNT(MATERIA) FROM PLANES WHERE ESTUDIO = 'Introducción

Anexo 1: SQL / 310


SQL' AND CURSO = (SELECT MAX(CURSO) FROM PLANES WHERE ESTUDIO =
'Introducción SQL')

Las sentencias SELECT anidadas se utilizan con mucha frecuencia a la hora de


Actualizar o Borrar registros de una tabla que requieran condiciones o restricciones
en las que están implicadas otras tablas distintas de la que se va a actualizar o
borrar.

Expresiones SQL
Las expresiones se utilizan en las cláusulas WHERE, HAVING y ORDER BY de las
sentencias SELECT.

Las expresiones nos permiten utilizar operaciones matemáticas como también


cadenas de caracteres y operadores de manipulación de fechas para construir
consultas complejas.

Una expresión puede contener:


Nombres de campos

Operadores numéricos

Operadores de fechas

Operadores lógicos

Constantes

Operadores de caracteres

Operadores de relación

Funciones

Nombres de campos
Las expresiones más comunes son los nombres de campos. Se pueden combinar con
otros elementos de las expresiones

Constantes
Las constantes son valores que no cambian. Por ejemplo, en la expresión
FECHA_NACIMIENTO + 30, el valor 30 es una constante y FECHA_NACIMIENTO es
un nombre de campo.

Las constantes de caracteres se deben encerrar con una comilla simple ( ) o una
doble (" ). Para que una comilla simple o doble aparezca en una constante se pone
doble.(Por ejemplo, si la constante deseada es O’Donnel deberá figurar como
‘O’’Donnel’.

Operadores Numéricos
Para realizar operaciones numéricas se puede utilizar los operadores:
+ Suma

- Resta

* Multiplicación

Introducción al lenguaje SQL / 311


/ División

** o ^ Exponenciación

Operadores de caracteres
Las expresiones de caracteres pueden incluir los siguientes operadores:

+ Concatenación manteniendo espacios en blanco

- Concatenación moviendo los blancos al final

Si por ejemplo, NOMBRE contiene ‘Antonio ‘ y APELLIDOS ‘Rodríguez ‘

NOMBRE + APELLIDOS resultará ‘Antonio Rodríguez ‘

NOMBRE - APELLIDOS resultará ‘AntonioRodríguez ‘

Operadores de fechas
Las expresiones de caracteres pueden incluir los siguientes operadores:

+ Añade un número de días a una fecha para producir una nueva fecha.

- El número de días entre dos fechas o la resta de un número de días desde una
fecha para producir una nueva fecha.

Por ejemplo:

01/30/90 + 5 resulta 02/04/90 (la fecha esta en formato MM/DD/YY)

01/30/90 - 01/01/90 resulta 29

01/30/90 - 10 resulta 01/20/90

Operadores de relación
Los operadores de relación que pueden separar dos expresiones pueden ser
cualquiera de los siguientes:
= Igual a

<> Distinto de

> Mayor que

>= Mayor o igual que

< Menor que

<= Menor o igual que

Like Coincidencia con un patrón

Not Like No coincidencia con un patrón

Is Null Igual a nulo (vacío)

Anexo 1: SQL / 312


Is Not Null No es nulo (no está vacío)

Between Rango de valores entre una cota inferior y otra superior

In Pertenencia a un conjunto de valores o ser miembro de una subconsulta

Exist Cierto si una subconsulta devuelve como mínimo un registro

Any Compara un valor con cada valor devuelto por una subconsulta retornando

cierto si uno cualquiera de ellos cumple la condición. Any debe ir precedido de =, <>,

<, >, >= o >=. = Any es equivalente a In.

All Compara un valor con cada valor devuelto por una subconsulta retornando cierto

si todos ellos cumplen la condición. All debe ir precedido de =, <>, <, >, >= o >=.

Ejemplos que utilizan operadores de relación:


evaluación = ‘F’

Fecha_matricula >= {10/01/95}

Apellidos LIKE ‘Rodri%’

Grupo IS NULL

Anno BETWEEN 1985 AND 1995

WHERE M.ESTUDIOS = ANY (SELECT ESTUDIO FROM ESTUDIOS WHERE NIVEL = ‘1’)

WHERE NOTA > ALL (SELECT NOTA FROM CALIFICA WHERE VALOR1 > 4)

Comparación de cadenas de caracteres


[NOT] LIKE

Like permite utilizar los siguientes caracteres especiales en las cadenas de


comparación:

% comodín para seleccionar cualquier cadena de 0 o más caracteres

_ comodín para seleccionar cualquier carácter

Las mayúsculas y minúsculas son significativas.

Ejemplo: LIKE 'MART%' cualquier cadena que empiece con MART...

Operadores Lógicos
Dos o más condiciones pueden ser combinadas para formar expresiones más
complejas con distintos criterios. Cuando existen dos o más condiciones deberán
estar unidas por AND o OR. Por ejemplo,

Introducción al lenguaje SQL / 313


ANNO = 1995 AND CURSO = 2

deben de cumplirse las dos condiciones para que sea cierta la condición total.

SEXO = ‘V’ OR PAIS IS NOT NULL

Basta con que una de las dos sea cierta para que lo sea la condición total.

El operador lógico NOT es útil para poner al contrario una condición. Por ejemplo:

NOT (ANNO = 1995 AND CURSO = 2)

Prioridad de los operadores


En expresiones con mas de una condición el orden en el que se evalúan es muy
importante. La siguiente tabla muestra el orden en el que son evaluados los
operadores. Los operadores que figuran en la primera línea se evalúan los primeros,
luego los de la segunda y así sucesivamente. Los operadores que figuren en la
misma línea se evalúan de izquierda a derecha según aparezcan en la expresión.
1 - unario, + unario

2 ** o ^

3 *, /

4 +, -

5 =, <>, <, >, >=, >=, Like, Not Like, Is Null, Is Not Null, Between, In, Exists, Any,

All

6 NOT

7 AND

8 OR

El siguiente ejemplo muestra la importancia de la prioridad de los operadores:

WHERE SEXO = ‘V’ OR FECHA_NACIMIENTO > {3/30/1970} AND MATRICULA > 4000

Ya que el AND se evalúa primero, esta consulta nos devuelve aquellos alumnos con
nº de matricula mayor que 4000 y que hayan nacido con posterioridad al 30 de marzo
de 1970, como también aquellos que sean Varones.

Para forzar a que la cláusula se evalúe en orden distinto, por ejemplo, que muestre
aquellos alumnos que sean Varones o que hayan nacido después de esa fecha y que
además de una de las dos condiciones anteriores, su nº de matrícula sea mayor que
4000, será necesario usar paréntesis para encerrar las condiciones que deban
evaluarse primero, es decir:

WHERE (SEXO = ‘V’ OR FECHA_NACIMIENTO > {3/30/1970}) AND MATRICULA > 4000

Sentencia INSERT
La sentencia de INSERT se utiliza para añadir registros a las tablas de la base de
datos. El formato de la sentencia es:

Anexo 1: SQL / 314


INSERT INTO nombre_tabla [(nombre_columna, ...)] VALUES (expr, ...)

nombre_tabla nombre de la tabla

nombre_columna es una lista opcional de nombres de campo en los que se insertarán


valores en el mismo número y orden que se especificarán en la cláusula VALUES. Si
no se especifica la lista de campos, los valores de expr en la cláusula VALUES deben
ser tantos como campos tenga la tabla y en el mismo orden que se definieron al crear
la tabla.

expr es una lista de expresiones o valores constantes, separados por comas, para dar
valor a los distintos campos del registro que se añadirá a la tabla.

Ejemplo para añadir un registro a la tabla creada en el ejemplo de CREATE:

INSERT INTO LIBROS (TITULO, PAGINAS, FECHA) VALUES (‘Gestión Escolar


Integrada’, 234,{12/27/95})

Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo solo se han
especificado 3 campos con sus respectivos valores, el resto de campos quedaran a
nulo. Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo
nunca ha tenido un valor.

Sentencia UPDATE
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una
tabla de la base de datos. Su formato es:

UPDATE nombre_tabla SET nombre_columna = expr, ...

[WHERE { condición }]

nombre_tabla nombre de la tabla a modificar

nombre_columna es el nombre de columna o campo cuyo valor se desea cambiar. En


una misma sentencia UPDATE pueden actualizarse varios campos de cada registro
de la tabla.

expr es el nuevo valor que se desea asignar al campo que le precede. La expresión
puede ser un valor constante o una subconsulta.

La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y


determina que registros se modificarán.

Por ejemplo, subir el precio de compra de la tabla de libros un 10% de aquellos que
tengan más de 250 páginas, sería:

UPDATE LIBROS SET PRECIO = PRECIO * 1.1 WHERE PAGINAS > 250

Otro ejemplo, para fijar la fecha de matrícula de todos aquellos alumnos que la tienen
vacía a la fecha de hoy, se pondría:

UPDATE MATRICULA SET FECHA_MATRICULA = TODAY()

WHERE FECHA_MATRICULA IS NULL

Introducción al lenguaje SQL / 315


Ejemplo utilizando una subconsulta:

UPDATE LIBROS SET PRECIO = (SELECT AVG(PRECIO)

FROM LIBROS WHERE PRECIO IS NOT NULL)

WHERE PRECIO IS NULL

Con esta última sentencia se ha puesto precio a todos los libros que no lo tenían. Ese
precio ha sido el resultante de calcular la media entre los libros que si lo tenían.

Sentencia DELETE
La sentencia DELETE se utiliza para borrar registros de una tabla de la base de datos.
El formato de la sentencia es:

DELETE FROM nombre_tabla [WHERE { condición }]

nombre_tabla nombre de la tabla

La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT y


determina que registros se borrarán.

Cada sentencia DELETE borra los registros que cumplen la condición impuesta o
todos si no se indica cláusula WHERE.

DELETE FROM LIBROS WHERE MOD(TODAY - FECHA,365) > 20

Con el ejemplo anterior se borrarían todos los registros de la tabla libros cuya
antigüedad, desde la fecha de adquisición, fuera mayor de 20 años.

Para borrar las notas de evaluaciones que, no sean la Final, de los alumnos de años
anteriores se utilizaría la sentencia:

DELETE FROM NOTAS WHERE ANNO < 1995 AND EVALUACION <> ‘F’

Sólo como referencia (sin uso en la aplicación):

En la aplicación no se permite utilizar las siguientes sentencias SQL, aunque son del
lenguaje, por control sobre los datos:

Sentencias para crear o destruir tablas


La sentencia para crear una tabla es CREATE y para destruirla DROP.

Creación de una tabla


La sentencia para crear una tabla tiene la forma:

CREATE TABLE nombre_tabla (definición_columna, ...)

nombre_tabla es el nombre de la tabla a crear

definición_columna esta compuesto por el nombre de la columna o campo, seguida del


tipo de dato de dicha columna.

Las reglas para los nombres de columnas y los tipos de datos disponibles son

Anexo 1: SQL / 316


dependientes de la base de datos que esta utilizando.

Ejemplo de creación de una tabla de libros:

CREATE TABLE LIBROS (TITULO CHAR(200), PAGINAS SHORT, PRECIO CURRENCY,


FECHA_COMPRA DATE, PORTADA BLOB, RESUMEN MEMO)

Destrucción de una tabla


El formato para destruir o borrar un tabla es

DROP TABLE nombre_tabla

nombre_tabla nombre de la tabla a eliminar

La sentencia para borrar la tabla antes creada es

DROP TABLE LIBROS

Transacciones
Una transacción es una serie de cambios en la base de datos que deben ser tratadas
como una sola. En otras palabras, que se realizan todos o que no se haga ninguno,
pues de lo contrario se podrían producir inconsistencias en la base de datos.

Cuando no se tiene activada una transacción el gestor de base de datos ejecuta


inmediatamente cada sentencia INSERT, UPDATE o DELETE que se le encomiende,
sin posibilidad de deshacer los cambio en caso de ocurrir cualquier percance. Cuando
se activa una transacción los cambios que se van realizando quedan en un estado de
provisionalidad hasta que se realiza un COMMIT, el cual hará definitivos los cambios
o hasta realizar un ROLLBACK que deshará todos los cambios producidos desde que
se inició la transacción.

Introducción al lenguaje SQL / 317


Guía de referencia de lenguaje JavaScript
Contenidos
El lenguaje JavaScript

Código JavaScript

Sentencias

Comentarios

Asignación

Expresiones

Variables

Declaración de variables

Nombres de variables

Tipos de datos

Tipo String

Tipo Number

Tipo Boolean

Tipo Undefined

Tipo Null

Conversión de Tipos. Coerción

Conversión explícita de String a Number: parseInt(), parseFloat()

Conversión explícita de Number a String: toString()

Definición de funciones

Ámbito de las variables

Copia, comparación y paso de datos

Guía de referencia de lenguaje JavaScript / 319


Operadores

Precedencia de los operadores

Control del flujo del programa

if-else

Bucles for

Bucles for-in

Bucles while y do-while

Sentencias break y continue

Sentencia switch-case

Objetos

Prototipo de un objeto

Cláusula with

Operaciones matemáticas. El objeto Math

Matrices. El objeto Array

Cadenas de texto. El objeto String

Fechas y horas. El objeto Date

Funciones con un número variable de argumentos. Objeto Function

El objeto Global

El lenguaje JavaScript
JavaScript es la implementación de Microsoft del lenguaje JavaScript. Este lenguaje
se usa fundamentalmente para añadir contenidos a las páginas de Internet (páginas
htm o html), pero puede utilizarse para manipulación y personalización de otras
aplicaciones (como Microsoft Office), para la realización de procesos en servidores de
Internet, para administrar el sistema, etc.

Es un lenguaje interpretado. El código JavaScript, almacenado en un archivo de texto,


ha de ser traducido por un interprete para poder ser ejecutado. Es decir, los
programas JavaScript no pueden ser compilados para obtener una aplicación
independiente.

Cuando el código JavaScript forma parte de una página Web, se incluye en el archivo
HTML entre las etiquetas <SCRIPT LANGUAGE = "JavaScript"> y </SCRIPT>. Este
código será interpretado por el navegador de Internet cuando se descarga la página
desde el servidor. Podrá ser también ejecutado en el servidor Web, necesitando
igualmente un interprete.

Las versiones del sistema operativo Windows 98 y posteriores incluyen Windows


Script Host, un controlador para los motores intérpretes de scripts. Hay dos versiones:
Wscript.exe, que utiliza una hoja de propiedades para establecer las propiedades del
script; y Cscript.exe, que utiliza parámetros en la línea de comandos para establecer
las propiedades del script.

Anexo 2: JavaScript / 320


Windows Script Host utiliza las extensiones de archivos (.vbs para VBScript y .js para
JavaScript) para identificar el script y pasarlo al motor correspondiente. No requiere
de las etiquetas HTML para interpretar el código JavaScript.

JavaScript es un lenguaje de programación orientado a objetos (OOP). Proporciona


una colección de objetos y permite definir tipos de objetos personalizados que tienen
entidad propia y pueden ser reutilizados.

La OOP permite establecer una comparación entre el mundo físico y el del software.
En la realidad casi todos los objetos están constituidos por objetos más pequeños, que
tienen características y funcionalidad propia e independiente del conjunto al que
pertenecen.

En OOP las clases definen las características o propiedades y la funcionalidad o


métodos que determinan un ente. Se crearán objetos o instancias de una clase
determinada asignando valores a sus propiedades e implementando los métodos
concretos.

Los objetos software especializados permiten escribir el código una sola vez
reutilizándolo tal cual o adaptándolo a las necesidades particulares modificando
ciertas propiedades o métodos de los objetos.

Código JavaScript
El código JavaScript se escribe en formato de texto, está organizado en sentencias,
grupos de sentencias relacionadas constituyendo un bloque, y comentarios. En las
sentencias pueden utilizarse variables, constantes y expresiones.

Sentencias
Una sentencia consiste en uno o más items y símbolos en una línea, una nueva
línea indicará una nueva sentencia, sin embargo es conveniente terminar las
sentencias explícitamente utilizando el punto y coma (;), que es el carácter de
terminación de la sentencia.

Un bloque es un grupo de sentencias entre llaves ({}). Se utilizan bloques en la


definición de funciones, en las estructuras de control de flujo.

Comentarios
Los comentarios son líneas de código que no se interpretan, se emplean para incluir
notas aclaratorias o para eliminar temporalmente líneas de código que no se
quieren ejecutar.

Un comentario de una única línea se precederá por dos barras inclinadas a la


derecha (//). Un comentario multilínea comienza por una barra inclinada a la
derecha seguida de un asterisco (/*) y finaliza con estos mismos caracteres en
orden inverso (*/).

Asignación
El signo igual (=) es utilizado, como en el resto de los lenguajes de programación,
para asignar un valor. Es decir, una sentencia como miNum = 8; significa asignar el
valor 8 a la variable miNum. Cuando se quiere comparar dos valores para saber si
son iguales, se utilizan dos signos de igualdad (==).

Guía de referencia de lenguaje JavaScript / 321


Expresiones
Expresiones son un conjunto de símbolos y palabras, cualquier combinación de
variables, constantes y operadores que resulta en un valor Booleano (verdadero o
falso) o en una expresión numérica.

Variables
Las variables se utilizan para almacenar valores permitiendo recuperar y manipular
dichos valores utilizando nombres. Los nombres de variables deben ser descriptivos
para que constituyan una ayuda en la comprensión del programa.

Declaración de variables
Las variables de declaran con la sentencia var. Únicamente es necesario declarar
las variables cuando se trata de variables locales a una función, aunque es
conveniente declarar siempre las variables antes de utilizarlas.
var miVariable;

var miNumero = 123;

var b = true;

var nombre1 = "CARLOS LOPEZ SANCHEZ"

Las tres últimas sentencias declaran e inicializan la variable asignándole un valor.

Se pueden declarar varias variables en una única sentencia var separando los
nombres de las variables por comas:

var miVariable, miNumero = 123;

Si se quiere declarar una variable e inicializarla, pero no se quiere asignar ningún


valor en particular, puede asignarse el valor especial null.

Se puede declarar una variable implícitamente, sin utilizar la sentencia var,


simplemente asignándole un valor.

miNumero = 123; // variable declarada implícitamente

Sin embargo, no se puede utilizar una variable que nunca ha sido declarada, ya que
genera un error en tiempo de ejecución.

Nombres de variables
JavaScript diferencia entre mayúsculas y minúsculas. La variable miVariable se
considerará distinta de MiVariable. Los nombres de variable pueden tener cualquier
longitud y deben seguir las siguientes reglas:

El primer carácter debe ser una letra (mayúscula o minúscula), o un guión


bajo (_), o un símbolo de dolar ($).

Los siguientes caracteres pueden ser letras, números, guiones bajos o


símbolos dolar.

El nombre no puede coincidir con una palabra reservada.

Anexo 2: JavaScript / 322


Tipos de datos
Cuando se declara una variable sin inicializarla no pertenece a ningún tipo y tiene
un valor indefinido (undefined). Es cuando se inicializa cuando pasa a ser del tipo
equivalente al valor que contienen.

Se puede conocer el tipo de dato que contienen una variable utilizando la función
typeof que retorna una cadena indicando el tipo de dato.

Hay seis tipos de datos en JavaScript: cadenas de caracteres (String), números


(Number), objetos (Object) y Booleanos (Boolean). Los otros dos tipos son null y
undefined.

En realidad String, Number y Boolean son objetos intrínseco de JavaScript que tienen
sus propiedades y métodos. Aunque resulte transparente para el programador cuando
inicializa una variable con un número esta creando un objeto tipo Number.

Tipo String
Los Strings se delimitan por comillas simples o dobles. Se utilizan comillas simples
cuando el texto contiene dobles comillas y viceversa. Cuando se asigna a una
variable una cadena de caracteres la variable será de tipo String.

var miNombre = "Carlos López Sánchez";

Un string puede contener cero o más caracteres Unicode. Cuando contiene cero
caracteres se dice que es un string de longitud cero o vacío ("").

Caracteres Unicode son los establecidos por la organización internacional para la


normalización ISO, ampliando los 256 códigos ASCII a 65.536 códigos. Ocupando
cada carácter 2 bytes de memoria en lugar de 1. Para averiguar el código
correspondiente a un carácter determinado puede utilizarse el Mapa de caracteres
que se incluye con el sistema operativo Windows.

El símbolo "\" actúa como carácter de control para introducir otros caracteres en una
cadena. En la siguiente tabla se incluyen los más comunes de estos caracteres
especiales:
\n Salto de línea

\r Retorno de carro

\f Salto de página

\t Tabulador

\\ El propio carácter \

\' Comilla simple

\" Comilla doble

\b Carácter anterior

Los objetos String creados implícitamente se denominan strings estándar y son


tratados de forma diferente a los objetos String creados explícitamente, ya que todos
los string estándar comparten un objeto común global.

Guía de referencia de lenguaje JavaScript / 323


Tipo Number
Las variables tipo Number pueden contener tanto un entero como un número de
coma flotante de cualquier tamaño, tanto positivos como negativos.
var miNumero = 12345;

var miNumero1 = -382;

var miNumero2 = -3,14159;

miNumero = 6,023e+23;

pueden especificarse potencias de 10 en notación científica utilizando la letra "e",


tanto en mayúsculas como en minúsculas.

Hay ciertos valores numéricos que son especiales: NaN (Not a Number) indica que
no es un número, Infinity (Infinito positivo y negativo).

Los números enteros pueden estar representados en base 10 (decimal), base 8


(octal), y base 16 (hexadecimal).

Los números octales se especifican precediendo el número por un cero (0), pudiendo
contener dígitos entre 0 y 7. Si un número está precedido por un cero pero contiene
el dígito 8 o 9, se considera un número decimal. Un número que pudiendo ser octal
contenga la letra "e" (o "E") genera un error.

Los enteros hexadecimales se especifican precediéndoles por "0x", la "x" puede ser
mayúscula o minúscula, y puede contener dígitos de 0 a 9 y letras de la A a la F,
tanto en mayúsculas como en minúsculas. La letra "e" puede figurar en los enteros
hexadecimales pero no tiene el significado de número exponencial. Las letras de la
A a la F son usadas para representar los números comprendidos del 10 al 15 en
notación decimal. Es decir, 0xC equivale al 12, y 0x10 equivale al 16 en base
decimal.

Los números octales y hexadecimales pueden ser negativos, pero no pueden ser
faccionarios. Un número que empieza con un "0" y contienen decimales se
considerará un número de coma flotante en base 10.

var NumHex = 0xFF32; // número hexadecimal = 65330 en notación decimal

var NumOctal = 012345; // número octal = 5349 en decimal

Como hemos mencionado, en todos estos casos estamos creando una instancia de la
clase Number.

Tipo Boolean

Las variables de tipo Boolean pueden contener dos valores posibles: true (verdadero)
y false (falso) que se escriben en minúsculas. En una comparación, una expresión
que se evalúa a 0 toma el valor false, y si se evalúa a cualquier otro número distinto
de cero toma el valor true.

Por ejemplo, la expresión false == 0 se evalúa como true o verdadero.

Anexo 2: JavaScript / 324


Tipo Undefined
Es el valor que se asigna a una variable después de haber sido declarada, pero antes
de asignarle un valor.

Tipo Null
Cuando una variable no contiene ningún valor su contenido es nulo.

var miVar = null;

Conversión de Tipos. Coerción


En determinadas circunstancias se produce una conversión implícita o coerción
automática de tipos.
var var1 = "75";

var var2 = 25;

var3 = var1 + var2;

El símbolo + se utiliza tanto como operador aritmético de suma como para enlazar o
concatenar cadenas de caracteres. En este caso la variable numérica var2 se
convierte en string de forma que var3 será un string igual a "7525".

Conversión explícita de String a Number: parseInt(), parseFloat()


Los números pueden ser fácilmente convertidos en string. Para convertir un string
a un tipo number se utilizan las funciones parseFloat() y parseInt().

parseFloat(numstring) retorna un valor numérico igual al número contenido en


numstring, si numstring no puede convertirse a un número retornará NaN (Not a
Number).
parseFloat ("3,43ABC"); // retorna 3,43

parseFloat ("BCD"); // retorna NaN

Puede chequearse el valor NaN con la función isNaN(valornumero) retorna true si


valornumero es NaN y false en caso contrario.

parseInt(numstring, [base]) retorna un valor entero igual al número contenido en


numstring. El argumento opcional base es un valor entre 2 y 36 que indica la base del
número contenido en numstring, Si no se especifica, los strings precedidos por "0x"
se consideran hexadecimales y los que tienen el prefijo "0" octales, cualquier otro
string se considerará decimal.
var var1 = "75";

var var2 = 25;

var3 = parseInt(var1) + var2; // var3 será tipo number conteniendo el valor

100

Conversión explícita de Number a String: toString()


El método toString() forma parte de todos los objetos propios de JavaScript. Este
método se llama automáticamente cuando se requiere una conversión textual del
objeto. Por ejemplo cuando se concatena un Number a un String.

Guía de referencia de lenguaje JavaScript / 325


var var1 = 5678;

var1.toString(); // retorna "5678"

var2 = true;

var2.toString(); // retorna "true"

En el caso de los números, toString() tiene un argumento opcional para especificar


la base de numeración del valor retornado.

(15).toString(16); // retorna F que es la notación hexadecimal del número 15

(13).toString(2); // retorna 1101 que es la notación en base dos de 13

Definición de Funciones
Las funciones permiten agrupar sentencias bajo un nombre. Se escribe el grupo de
sentencias, se asigna un nombre, y se ejecuta el grupo entero simplemente
referenciando su nombre y pasando la información que requieran.

Para definir una función se emplea la palabra reservada function seguida del nombre
de la función. Los nombres de funciones siguen las mismas reglas que los nombre de
variables.

Si la función tiene que recibir información esta irá encerrada entre paréntesis
después del nombre de la función, esta información se conoce como argumentos o
parámetros. Algunas funciones no requieren argumentos; otras necesitan uno; otras
varios argumentos que se separarán con comas (,). Hay incluso funciones para las
cuales el número de argumentos depende de como se está usando la función.

Las sentencias de la función se encierran entre llaves ({}) a continuación de la


declaración de argumentos.

Las funciones pueden retorna resultados mediante la sentencia return.


function Calcular (a, b, c)

return a*b*c

var = Calcular (3, 2, 4) // var será igual a 24

En el tutorial de JavaScript suministrado por Microsoft se encuentra el siguiente


ejemplo:
var epsilon = 0.0000000000001; // Un número muy pequeño para evaluar

var triplet = false;

function integerCheck(a, b, c)

{ // función de chequeo de enteros

Anexo 2: JavaScript / 326


if ( (a*a) == ((b*b) + (c*c)) )

triplet = true;

function floatCheck(a, b, c)

{ // Función de chequeo para números de coma flotante

var theCheck = ((a*a) - ((b*b) + (c*c)))

if (theCheck < 0)

{ // El chequeo requiere valores absolutos, invierte theCheck si es negativo.

theCheck *= -1;

if (epsilon > theCheck)

triplet = true;

function checkTriplet(a, b, c)

{ // Mueve el lado más largo a la posición a

var d = 0;

if (c > b)

{ // If c > b, los intercambia.

d = c;

c = b;

b = d;

if (b > a)

{ // If b > a, los intercambia

d = b;

b = a;

a = d;

Guía de referencia de lenguaje JavaScript / 327


// El lado a es ahora la hipotenusa, si es que existe una hipotenusa.

if (((a%1) == 0) && ((b%1) == 0) && ((c%1) == 0))

{ // Comprueba si los tres valores son enteros

integerCheck(a, b, c);

else floatCheck(a, b, c); // Si no los son busca una aproximación

var sideA = 5;

var sideB = 5;

var sideC = 7,0710678118654755; // = raíz cuadrada de 50

checkTriplet(sideA, sideB, sideC); // triplet será true

La función checkTriplet recibe como argumentos la longitud de los lados de un


triángulo, y determina si el triángulo es un triángulo rectángulo chequeando si los
tres números cumplen el teorema de Pitágoras, es decir, el cuadrado de la longitud de
la hipotenusa es igual a la suma de los cuadrados de la longitud de los otros dos lados.

Se utiliza un número muy pequeño para chequear en el caso de números de coma


flotante, ya que como consecuencia del redondeo el chequeo puede resultar falso.

Ámbito de las variables


Las variables pueden ser globales o locales. Si se declara una variable fuera de la
definición de una función, será una variable global, y su valor es accesible y
modificable a través de todo el programa. Si se declara una variable dentro de una
función será una variable local, estas variables se crean y se destruyen cada vez que
se ejecuta la función y no son accesibles fuera de la función.

Una variable local puede tener el mismo nombre que una variable global, pero siguen
siendo enteramente distintas. Al cambiar el valor de una de ellas no cambiará el
valor de la otra. Dentro de la función en la cual la variable local es declarada, sólo
esta variable tendrá significado.

No existe posibilidad de declarar variables estáticas como ocurren en otros lenguajes.


Estas son variables que mantienen su valor entre las sucesivas llamadas a la
función en que se a definido.

Copia, comparación y paso de datos


Un valor se copia o se pasa a una función por valor, cuando se ubica para él un nuevo
espacio de memoria y se coloca en este espacio el valor original. Si se cambia el
original, la copia no se verá afectada y viceversa, ya que se trata de entidades
independientes.

Cuando se copia o se pasa un valor por referencia, se crea un puntero al ítem original
y se utiliza el puntero como copia. Si se cambia el original, cambiarán ambos original
y copia (y viceversa). Hay una única entidad, la copia no es realmente una copia, es

Anexo 2: JavaScript / 328


otra referencia a un mismo dato.

Datos tipo Number y Boolean por defecto son copiados, pasados y comparados por
valor. Objetos, Arrays y funciones son copiados, pasados y comparados por referencia.

Por último, Strings son copiados y pasados por referencia, pero son comparados por
valor.

Cuando se pasa un parámetro a una función por valor, se hace una copia separada
del parámetro, una copia que existe solamente dentro de la función, puede cambiarse
el valor del parámetro dentro de la función sin que cambie su valor fuera de ella. Si
se pasa el parámetro por referencia y la función cambia el valor de dicho parámetro,
quedará cambiado el original en cualquier parte del script.

Operadores
Aritméticos Lógicos Bit a Bit Asignación Otros
Cambio de - Negación ! Negación ~ Asignación = borrar delete
signo
Incremento + Menor que < Rotación << Con adición += tipo typeof
+ izquierda
Decremento -- Mayor que > Rotación >> Con -= obviar void
derecha sustracción valor
Multiplicar * Menor o < Rotación >> Con *=
igual que = derecha > multiplicación
sin signo
Dividir / Mayor o > AND & Con división /=
igual que =
Módulo % Igual a = XOR ^ Con módulo %=
=
Suma + Distinto a != OR | Con op. bit a <<=,
bit >>=,
etc.
Resta - AND &
&
OR |
|
Condicional ?:
Coma ,
Igualdad =
estricta =
=
Desigualdad !
estricta =
=

Guía de referencia de lenguaje JavaScript / 329


Si al evaluar una expresión matemática alguno de los operandos es nulo (null) el
resultado será nulo.

JavaScript proporciona los operadores de incremento ++ y decremento --, también


disponibles en C/C++. La expresión a++; es equivalente a la expresión a = a + 1;
aumentando en una unidad la variable a. En este caso el operador es un post-
incremento. Su acción es aumentar el valor de la variable y luego devolver dicho
valor. También puede utilizarse precediendo al nombre de la variable, sería un pre-
incremento.
var n1 = 1, n2, n3;

n2 = ++n1;

n3 = n1++;

Como resultado de las anteriores sentencias n1 tendrá el valor 3 por haber


incrementado dos veces su valor inicial 1, n2 y n3 valdrán 2, ya que en la última
sentencia se asigna el valor 2 de n1 a n3 y a continuación se incrementa n1.

Los operadores lógicos se utilizan para evaluar expresiones y poder tomar decisiones
dependiendo de que el resultado sea verdadero o falso:

Operador Operando1 Operando2 Resultado


AND (&&) false false false

false true false

true false false

true true true

OR (||) false false false

false true true

true false true

true true true

NOT (!) false true

true

Los operadores bit a bit: AND (&), OR (|), XOR (^) y NOT (~) actúan a nivel binario
haciendo una comparación bit a bit según la siguiente tabla:

Segundo_Bi Resultad
Operador Primer_Bit
t o

AND (&) 0 0 0
1 0 0
0 1 0

Anexo 2: JavaScript / 330


Segundo_Bi Resultad
Operador Primer_Bit
t o

1 1 1

OR (|) 0 0 0
1 0 1
0 1 1
1 1 1
XOR (^) 0 0 0
1 0 1
0 1 1

1 1 0
NOT (~) 0 1
1 0

Por ejemplo 15^5 se evalúa a 10 al comparar bit a bit la representación binaria de 15


(1111) y 5 (0101) resulta 1010 que corresponde a la representación binaria del
número 10 en decimal.

Veamos el siguiente ejemplo del operador de negación:

var num = 0, num2;

num2 = ~num;

Como resultado cabría esperar que num2 tuviera el valor 1, sin embargo el resultado
es -1. Para entender esto hay que conocer la representación interna que JavaScript
hace de los números.

Los números enteros son almacenados en 2 bytes (16 bits) reservando el primero de
ellos para el signo. Por tanto, podemos utilizar números enteros en el rango -32.768 -
32.768.

Esta representación se conoce como complemento a dos, para representar un número


negativo se aplica el operador lógico NOT a los 15 bits del número positivo, se coloca
un 1 en el bit menos significativo (el de la izquierda correspondiente al signo) y se
suma 1 al resultado.

Según esto para negar el número de 16 bits que representa al 1 habría que hacer lo
siguiente:
0000 0000 0000 0001 se niegan los 15 bits finales

0111 1111 1111 1110 se coloca un 1 en el bit de la izquierda

1111 1111 1111 1110 se suma 1 al resultado

1111 1111 1111 1111 para obtener el número 1 cambiado de signo, o se -1

Si al número 0 de 16 bits le aplicamos el operados NOT (~) obtenemos 1111 1111

Guía de referencia de lenguaje JavaScript / 331


1111 1111 que como acabamos de ver es realmente el -1.

Los operadores de desplazamiento de bits requieren dos argumentos: el número


entero en el que se produce el desplazamiento de bits a izquierda o derecha, y un
segundo entero indicando el número de posiciones a desplazar. Por ejemplo, 43 << 3
resulta 344.

0000 0000 0010 1011 << 3 = 0000 0001 0101 1000

Estos operadores, al contrario que en C/C++, mantienen el bit del signo desplazando
únicamente los 15 bits correspondientes al número. Sin embargo el operador >>>
desplaza los bits a la derecha incluido el bit de signo.

Los operadores de asignación compuestos actúan como sigue:


num += 2; // equivale a num = num + 2

num -= 2; // equivale a num = num - 2

num *= 2; // equivale a num = num * 2

num /= 2; // equivale a num = num / 2

etc.

Precedencia de los operadores


La siguiente tabla muestra los operadores en orden de mayor a menor precedencia.
Los operadores que se encuentran el la misma fila de la tabla se evalúan de
izquierda a derecha.

Operador Descripción

Acceso a miembro, indice de array,


. [] ()
llamada a función
Operadores unuarios, tipo de dato,
++ -- - ~ ! typeof new void delete
constructor, valores indefinidos

*/% Multiplicación, división, módulo


Adición, sustracción, concatenación
+-+
de cadenas
<< >> >>> Desplazamiento de bits
Menor que, menor o igual que,
< <= > >=
mayor que, mayor o igual que
Igualdad, desigualdad, igualdad
== != === !==
estricta, desigualdad estricta
& AND
^ XOR
| OR
&& AND lógico

Anexo 2: JavaScript / 332


|| OR lógico
?: Condicional
asignación, asignación con
= OP=
operación
, Múltiple evaluación

Los paréntesis son utilizados para alterar el orden de evaluación. La expresión dentro
del paréntesis es completamente evaluada antes de que su valor sea usado en el
resto de la sentencia.

x = a * (b + c + d)

Hay cinco operadores en esta expresión: =, *, (), +, y +. Serán evaluados en el


siguiente orden según la tabla de precedencias: (), *, +, +, =. Primeramente se evalúa
la expresión dentro del paréntesis: hay dos operadores de suma que tienen igual
precedencia: se sumarán b y c y al resultado se sumará d. El resultado de esta suma
se multiplicará por a. Por último se asignará el resultado a x.

Control del flujo del programa


Estas sentencias proporcionan a los programas la capacidad de decisión y la de
realizar procesos repetitivos

if-else
Esta sentencia permite evaluar una expresión booleana y ejecutar una sentencia o
bloque de sentencias en el caso de que el resultado de evaluar la expresión sea true.
Opcionalmente puede especificarse, bajo la cláusula else, un grupo de sentencias a
ejecutar cuando el resultado sea false.
if (condición)

sentencias

[else

sentencias

}]

Cuando se ejecuta una única sentencia no es necesario utilizar las llaves.


if (num > 0 && num< 100)

num +=1;

if (num > 0 && num< 100)

num += 1;

Guía de referencia de lenguaje JavaScript / 333


total = num;

else

num = 1;

Pueden anidarse las sentencias if-else cuando se requiera.


if (pesoreal < pesoideal)

txt = "Está usted delgado";

else

if (pesoreal == pesoideal)

txt = "Su peso es idoneo";

else

txt = "Sufre sobrepeso";

JavaScript también soporta una forma condicional implicita:

hora += (laHora >= 12) ? " PM" : " AM";

Cuando se tienen que evaluar varias condiciones, se puede acelerar la ejecución


del programa colocándolas en un orden determinado. Por ejemplo, si tres
condiciones están conectadas por el operador AND (&&) y la segunda se evalúa a
false, la tercera condición no se evaluará. Análogamente, si varias condiciones
están unidas por el operador OR (||) la evaluación parará cuando se encuentre la
primera de ellas que sea true.

Bucles for
Permite ejecutar una sentencia o bloque de sentencias repetitivamente mientras
se cumpla una determinada condición. Especifica una variable contador, un
condición a evaluar, y una acción que actualiza el contador. Justo antes de cada
ejecución del bucle (paso o iteración del bucle), la condición es evaluada. Después de
que el bucle es ejecutado, la variable contador es actualizada justo antes del
comienzo de la siguiente iteración.

Si la condición nunca se alcanza, el bucle no se ejecutará. Si la condición es


siempre verdadera (true), resultará un bucle inifinito.
var s = 1, t;

for (var i = 0; i <= 100; i++)

s += i;

t = s;

La variable i se declara como variable contador con un valor inicial 0, a


continuación se evalúa la condición i <= 100 y si es verdadera se ejecuta el bloque
de sentencias (sentencias entre llaves), por último se verá incrementada la variable

Anexo 2: JavaScript / 334


contador en una unidad. Cuando el bloque se ha ejecutado 100 veces se detendrá el
bucle. La variable i así declarada sólo es válida dentro del bucle.

Es posible establecer un salto variable para el contador del bucle. El siguiente


ejemplo muestra una función que cuenta el número de bits necesarios para
representar en base dos un número decimal n.
function numbits (n)

var paso = 1;

var t = 0;

for (var i = 1; i <= n; i++)

t++;

paso = i;

return t;

num = numbits (15); // retorna 4

Los bucles for se pueden anidar. Es decir se puede ejecutar un bucle dentro de otro.
var t = "";

for (i = 0; i <= 9; i++)

for (j=0; j <= 9; j++)

t = t + i + j + " ";

t += "\n";

La variable t contendrá una cadena con los números 00 01 02 03... al 99. En cada
iteración del bucle exterior, se añade a la cadena un retorno de carro, formándose
10 líneas.

Bucles for-in
Ejecuta el cuerpo del bucle tantas veces como miembros tenga una colección de
objetos o una matriz sin necesidad de conocer su número exacto. Supongamos un
objeto Biblioteca con una propiedad llamada Libro que devuelve una cadena de texto
con cada uno de los títulos de los libros de esa biblioteca. Para obtener una lista
completa de los libros escribimos:
var libro = "";

var lista = "";

for (libro in Biblioteca.Libro)

lista = lista + libro + "\n"

Guía de referencia de lenguaje JavaScript / 335


Bucles while y do-while
Ejecutarán un bloque de sentencias hasta que una determinada condición sea falsa
(false). La sintaxis para los bucles while es:
while (condición)

bloque_de_sentencias

y para los bucles do-while


do

bloque_de_sentencias

}while (condición)

En el primer caso se evalúa la condición antes de comenzar la ejecución del bucle,


en el segundo se realiza después de la ejecución del bloque de sentencias. Por tanto,
los bucles do-while se ejecutan al menos una vez, mientras que los bucles while no
se ejecutarán nunca si la condición es falsa ya inicialmente.

A diferencia de los bucles for, se desconoce de antemano el número de veces que se


ejecutará el bucle, por lo que se llaman bucles indeterminados.

Sentencias break y continue


La sentencia break se utiliza para detener la ejecución del bucle y continuar
ejecutando la sentencia inmediatamente posterior al bucle.

La sentencia continue se utiliza para hacer que el bucle inicie la siguiente


iteración, saltando el resto del bloque de código pero actualizando la variable
contador si procede. Únicamente se utiliza en los bucles while, do-while, for, y for-in.

El siguiente ejemplo muestra una función que retorna una cadena conteniendo los
números, separados por blancos, comprendidos en un intervalo dado n1::n2 excepto
los que son múltiplos de 5:
function NoMult5 (n1, n2)

var txt = "";

for (i=n1; i<=n2; i++)

if (i % 5 == 0)

continue;

txt += txt +" ";

return txt;

Anexo 2: JavaScript / 336


}

Sentencia switch-case
Permite la ejecución de un bloque de sentencias cuando una el valor de una
expresión coincide con una etiqueta.
switch (expresión)

case etiqueta1:

bloque 1

case etiqueta2:

bloque 2

...

default:

bloque n

La cláusula default indica el bloque de sentencias a ejecutar en el caso de que


ninguno de los valores de las etiquetas coincida con la expresión.

Primeramente se evalúa la expresión y se busca, en orden, una etiqueta que


coincida con ella. Si el valor de una etiqueta es igual a la expresión se ejecuta el
bloque de sentencias que la siguen, continuando la ejecución hasta encontrar una
sentencia break o hasta que finaliza la sentencia switch.

Cuando se quiere ejecutar el mismo código para varios valores de la expresión, se


especifican varias etiquetas separadas por comas. Veamos un ejemplo:
switch (Nota)

case 0, 1, 2, 3, 4:

txt = "Suspenso";

break;

case 5, 6:

txt = "Aprobado";

break;

case 7, 8:

txt = "Notable";

break;

case 9, 10:

txt = "Sobresaliente";

break;

Guía de referencia de lenguaje JavaScript / 337


default:

txt = "Indeterminada";

Objetos
Los objetos son esencialmente colecciones de propiedades y métodos. Un método es
una función que es miembro de un objeto, y una propiedad es un valor o grupo de
valores (en forma de objeto array) que es miembro de un objeto.

JavaScript soporta tres tipos de objetos: objetos intrínsecos, objetos creados por el
programador, y objetos del navegador.

Hay nueve objetos intrínsecos o incorporados: Array, Boolean, Date, Function, Global,
Math, Number, Object, y String.

Para crear instancias de un objeto se utiliza la palabra reservada new seguida del
nombre del objeto, por ejemplo:

var fecha = new Date (2001, 1, 12);

Con ello llamamos a un método especial del objeto denominado constructor. El


constructor recibe unos parámetros y los asigna a ciertas propiedades
particularizando la instancia del objeto frente a las demás.

Para crear instancias de un objeto propio hay que escribir un constructor para dicho
objeto. El siguiente ejemplo define las propiedades del objeto Ciudad y su constructor:
// Constructor de Ciudad

function Ciudad (nombre, habitantes, pais)

this.Nombre = nombre;

this.Habitantes = habitantes;

this.Pais = pais;

var Madrid = new Ciudad ("Madrid", 3800000, "España"); // crea un objeto Ciudad

La palabra clave this es utilizada para referenciar el objeto actual.

Para referenciar cualquier miembro de un objeto (propiedades o métodos) se escribe


el nombre del objeto seguido de un punto y del nombre de la propiedad.

var h = Madrid.Habitantes; // asigna a h 3.800.000

JavaScript tiene la particularidad de que los objetos y las matrices o arrays se


manejan de forma idéntica, ya que el objeto es en realidad una lista o array de
propiedades y métodos. Se pueden referencias los miembros de un objeto por su
nombre, como acabamos de ver, y también por su índice. La numeración de índices

Anexo 2: JavaScript / 338


comienza por cero. Las siguientes sentencias son equivalentes:
var h = Madrid.Habitantes;

var h = Madrid[1];

var h = Madrid["Habitantes"];

Una vez creado el objeto puede cambiarse el valor de cualquiera de sus propiedades.

Madrid.Habitantes = 4000000;

Para definir los métodos miembro de un objeto se define una función y se asigna al
método del objeto en su constructor. Supongamos que la clase Ciudad tiene un
método llamado Resumen que retorna una cadena de texto con el resumen de las
propiedades del objeto. Se define primero la función:
function ciudad_resumen ()

return "Nombre: " + this.Nombre + "\nHabitantes: " + this.Habitantes +

"\nPais: " + this.Pais + "\n";

se asigna como método de la clase en su constructor:


function Ciudad (nombre, habitantes, pais)

this.Nombre = nombre;

this.Habitantes = habitantes;

this.Pais = pais;

this.Resumen = ciudad_resumen;

En la función se utiliza la palabra clave this que hace referencia a la instancia


concreta que llame al método en cada ocasión.
var Huelva = new Ciudad ("Huelva", 500000, "España);

var txt = Huelva.Resumen(); // equivale a Huelva["Resumen"]();

Puede cambiarse el comportamiento del objeto en tiempo de ejecución reasignando


sus métodos para cada instancia concreta. Por ejemplo en el resumen de Huelva no
queremos que incluya el país.
function ciudad_resumen_breve ()

return "Nombre: " + this.Nombre + "\nHabitantes: " + this.Habitantes + "\n";

Huelva.Resumen = ciudad_resumen_breve;

Guía de referencia de lenguaje JavaScript / 339


Pueden definirse nuevas propiedades y métodos para un objeto una vez creado. Para
ello basta con asignar un valor a la nueva propiedad o método:

Madrid.Capital = true; // la propiedad Capital es ahora miembro del objeto


Madrid

Ahora bien, estas nuevas propiedades o métodos son miembros únicamente del
objeto para el que se definen (en este caso sólo de Madrid) y no de la clase Ciudad.

Tampoco se pueden reasignar los métodos para la clase en tiempo de ejecución. Por
ejemplo la siguiente sentencia

Ciudad.Resumen = ciudad_resumen_breve;

no generará ningún error, pero la asignación no funcionará, y todos los objetos se


comportarán igual que antes.

Prototipo de un objeto
JavaScript suministra una propiedad llamada prototype que permite crear nuevas
propiedades y métodos que serán comunes a todos los objetos de la clase. Estas
propiedades son copiadas por referencia en cada objeto de la clase, por lo que
tendrán el mismo valor para todos ellos. Sin embargo, se pude cambiar el valor de un
miembro prototype en un objeto, y el nuevo valor sobreescribe el valor de defecto
únicamente en esa instancia. Otros objetos pertenecientes a la misma clase no se
verán afectados por el cambio.

Ciudad.prototype.Capital = false;

Ciudad.prototype.Resumem_breve = ciudad_resumen_breve;

Ahora la propiedad Capital el método Resumen_breve forman parte del prototipo de la


clase. Para referenciarles no es necesario incluir la palabra prototype.

var c = Huelva.Capital; // será false mientras que Madrid.Capital será true

txt = Madrid.Resumen_breve;

Es posible incluso, definir nuevas propiedades para los objetos intrínsecos de


JavaScript, ya que todos ellos tienen la propiedad prototype. Por ejemplo, la clase
Number tiene una serie de propiedades que representan constantes (MAX_VALUE,
MIN_VALUE, NaN, NEGATIVE_INFINITY y PODITIVE_INFINITY), MIN_VALUE es el
número más próximo a cero que puede representarse en JavaScript,
aproximadamente igual a 2,22e-308.

Number.prototype.MIN_VALUE = 0;

Puede obtenerse una relación de las propiedades y métodos de un objeto creado por
el programador con la siguiente función:
function ResumenObjeto (obj)

var propiedad;

var txt "";

Anexo 2: JavaScript / 340


for (propiedad in obj)

txt += pripiedad + ": " + obj[prop] + "<br>";

return txt;

Cláusula with
La palabra clave with permite designar un objeto como predeterminado en un bloque
de sentencias, de forma que puedan referenciarse sus métodos y propiedades sin
necesidad de precederlos con el nombre del objeto. Por ejemplo la definición de la
función ciudad_resumen puede simplificarse como sigue:
function ciudad_resumen ()

with (this)

return "Nombre: " + Nombre + "\nHabitantes: " + Habitantes + "\nPais: " +

Pais + "\n";

Operaciones matemáticas. El objeto Math


Es el objeto JavaScript que proporciona la funcionalidad matemática. Este objeto no
puede ser creado usando el operador new, dando un error cuando se intenta utilizar.
Es creado por el motor interprete del script en el momento en que se carga el motor.

M étodos:

Math.abs(n) - Retorna el valor absoluto del número o expresión numérica n que


recibe como argumento

Math.acos(n) - Retorna el arco coseno de la n

Math.asin(n) - Retorna el arco seno de n

M ath.atan(n) - Retorna el arco tangente de n

M ath.atan2(y, x) - Retorna el ángulo en radianes desde el eje X a el punto (y, x)


que recibe como argumento

M ath.ceil(n) - Retorna el entero más pequeño que sea menor o igual que n

M ath.cos(n) - Retorna el coseno de n

M ath.exp(n) - Retorna el número e elevado a n, siendo e la constante de Euler


cuyo valor aproximado es 2,718282

M ath.floor(n) - Retorna el mayor entero que sea mayor o igual que n

M ath.log(n) - Retorna el logaritmo neperiano de n

M ath.max(n1, n2) - Retorna el máximo entre n1 y n2, n1 es una expresión


numérica y n2 un valor numérico

Guía de referencia de lenguaje JavaScript / 341


M ath.min(n1,n2) - Retorna el mínimo entre n1 y n2, n1 es una expresión
numérica y n2 un valor numérico

M ath.pow(b, e) - Retorna b elevado a la potencia e

M ath.random() - Retorna un número aleatorio entre 0 y 1 ambos incluidos. El


número generador del número aleatorio (semilla) es suministrado
automáticamente cuando se carga el interprete JavaScript.

M ath.round(n) - Retorna el número entero más próximo a n, si la parte decimal


del número es 0,5 o mayor, el valor retornado es igual a menor entero mayor que
n. En caso contrario retorna el mayor entero menor o igual que n.

M ath.sin(n) - Retorna el seno de n

M ath.sqrt(n) - Retorna la raíz cuadrada de n

M ath.tan(n) - Retorna la tangente de n

Propiedades y constantes:
E - Número de Euler, base de los logaritmos neperianos. Aproximadamente

2,718282

LN2 - Logaritmo neperiano de 2, aproximadamente 0,693

LN10 - Logaritmo neperiano de 10, aproximadamente 2,302

PI - Relación entre la longitud de la circunferencia y su diámetro.

Aproximadamente 3,14159

LOG2E - Logaritmo en base 2 de e, aproximadamente 1,442

LOG10E - Logaritmo natural o en base 10 de e, aproximadamente 0,434

SQRT2 - Retorna la raíz cuadrada de 2, aproximadamente 1,414

SQRT1_2 - Sirve para obtener la inversa de la raíz cuadrada de 2 o raíz cuadrada

de 0,5, muy usada en trigonometría, aproximadamente 0,707

Ejemplos:
Math.sqrt (25); // retorna 5

Math.pow (5, 3);

/* retorna 5 elevado a 3 = 125. No se puede hacer 5^3 ya que ^ el operados XOR a

nivel de bits */

Math.floor (3.14); // retorna 3

Math.floor (-3.14); // retorna -4

Anexo 2: JavaScript / 342


Math.ceil (3.14); // retorna 4

Maht.ceil (-3.14); // retorna -3

Math.round (3.14); //retorna 3

Maht.round (3.64); // retorna 4

Math.roung (3.4); // retorna 4

/* La siguiente función recibe un n y un entero ndec y retorna el número n


redondeado con ndec decimales */
function xround (num, ndec)

var factor = 1;

for (i=1; i<=ndec; i++)

factor *= 10;

return Math.round (num * fact) / fact;

var n;

n = xround (2.345, 2); // retorna 2.34

n = xround (2.368, 1); // retorna 2.4

n = xround (2.368); // retorna 2

/* La siguiente función genera un número aleatorio comprendido entre los


números LInferiror y LSuperior que recibe como argumento */
function NAleatorio (LInferior, LSuperior)

return Math.round (LSuperior - LInferior) * Math.random() + LInferior;

Math.max (20, 80); // retorna 80

Math.min (20, 80); // retorna 20

/* La siguiente función recibe un número n retornado un 1 si el número es


positivo, un -1 si es negativo y un 0 si el número es 0 */
function sgn (n)

if (n != 0)

return n / Math.abs(n);

else

return 0;

Guía de referencia de lenguaje JavaScript / 343


Matrices. El objeto Array
Una matriz es un conjunto de elementos colocados de forma adyacente en la vemoria
de manera que se pueden referenciar por un nombre común y un índice

La clase Array permite definir y manejar matrices.

var Proveedores = new Array (); // define una matriz de tamaño


indeterminado

var Proveedores = new Array (20); // define una matriz de 20 elementos

Los elementos se pueden direccionar escribiendo el nombre del objeto array seguido
del indice del elemento entre corchetes. Los indices han de ser números enteros
positivos, comenzando con el 0:
Proveedores[0] = "Teleline";

Proveedores[1] = "Arrakis";

Proveedores[2] = "CTV-Jet";

Proveedores[3] = "Alehop";

Proveedores[20] = "Arsys";

El tamaño o número de elementos puede variar en tiempo de ejecución del script. Es


decir, los arrays son dinámicos. Los índices no tienen que ser necesariamente
consecutivos, en el ejemplo anterior los elementos del 4 al 19 no se han inicializado
y tendrán el valor undefined.

La propiedad length del objeto Array almacena automáticamente el número de


elementos de la matriz. En el ejemplo anterior la propiedad length valdrá 21 y no 5.

Se puede definir la matriz y sus elementos simultáneamente en al llamada al


constructor:

var Proveedores = new Array ("Teleline", "Arrakis", "CTV-Jet", "Alehop", "Arsys");

JavaScript no soporta de forma directa las matrices multidimensionales. Para


manejar este tipo de matrices definimos una matriz que a su vez contiene otras
matrices. Así, para definir una matriz de dos dimensiones con 5 elementos por cada
dimensión (25 en total):
var M = new Array (5);

for (i=0; i<=4; i++)

M[i] = new Array (5);

Se crea un array M de 5 elementos cada uno de los cuales es, a su vez, un array. Si
hay que crear más dimensiones se repite el proceso anterior para cada elemento de
las sucesivas matrices. Una vez definido el array multidimensional, se accede a sus
elementos escribiendo los índices correspondientes entre corchetes

M [0][0] = "Primer elemento de la matriz";

El siguiente ejemplo crea una tabla de multiplicar desde 0x0 al 16x16:

Anexo 2: JavaScript / 344


var tabla = new Array (17);

for (var i = 0; i < tabla.length; i++)

var fila = new Array (17);

for (var j=0; j< fila.length; j++)

fila[j] = i + " x " + j + " = " + i*j;

tabla [i] = fila + "<br>";

var m3x7 = tabla[3][7];

M étodos:

array1.concat(array1) - retorna una objeto Array resultado de concatenar array1 y


array2.

array.join(separador) - retorna una cadena de texto conteniendo los elementos del


array separados por el string separador, si no se especifica este string se utilizará
el string vacío "".

array.reverse() - invierte el orden de los elementos del array.

array.slice(inicio, [fin]) - retorna un nuevo array conteniendo los elementos de


array comprendidos entre los índices inicio y fin que recibe como argumento,
incluyendo el primero de ellos pero no el último. Si se omite fin la extracción se
realizará hasta el final del array incluyendo el último elemento. Si fin es un
número negativo indicará un desplazamiento desde el final del array.

array.sort([funcionsort]) - ordena los elementos del array. Si se omite la función de


ordenación, los elementos se ordenan ascendentemente según su código ASCII.
La función de ordenación debe retornar un valor negativo cuando el valor de su
primer argumento es menor que el del segundo, un cero cuando los dos
argumentos son equivalentes, y un valor positivo si el primer argumento es
mayor que el segundo.

array.toString() - este método, que forma parte de todos los objetos intrínsecos de
JavaScript, es llamado automáticamente cuando el array tiene que convertirse
en string. Cada elemento es convertido a string y todos ellos se concatenan
separados por comas.

array.valueOf() - igual a toString.

Ejemplos:
var a = new Array (0, 1, 2, 3, 4);

var b = new Array (5, 6, 7, 8, 9);

var c = a.concat (b); // c será un array con los elementos 0, 1, 2 , 3, 4, 5, 6, 7,

8 ,9

var txt = c.join ("--"); // txt será 0--1--2--3--4--5--6--7--8--9

Guía de referencia de lenguaje JavaScript / 345


a.reverse(); // a contendrá los elementos 4, 3, 2, 1, 0

var d = c.slice(5, 8); // d será un array con los elementos 5, 6, 7

var e = c.slice(4, -2); // e será un array con los elementos 4, 5, 6, 7. No

incluye los dos últimos

/* El siguiente ejemplo ilustra como añadir un método al objeto Array que retorne
el valor del mayor de sus elementos */
function array_max ()

var i, max = this[0];

for (i=1; i < this.length; i++)

if (max < this[i])

max = this[i];

return max;

Array.prototype.max = array_max;

var x = new Array (1, 2, 3, 4, 5, 6);

var y = x.max(); // y valdrá 6 que es el máximo elemento de x

Cadenas de texto. El objeto String


Cuando se declara en JavaScript una variable de string o se utilizan literales, se
crea un objeto String. Los objetos String creados implícitamente son tratados de
forma algo diferente a los creados explícitamente con el operador new. Todos los
strings implícitos comparte un único objeto, de forma que si se añade una propiedad
a uno de ellos, la propiedad se añadirá al resto de los string implícitos.
var a, b;

a = "Esto es un string estándar";

b = "Esto es otro string estándar";

a.test = 10;

En este caso, la propiedad test se define para a y para todos los literales utilizados en
el resto de script. Sin embargo, en el siguiente ejemplo:
var a, b;

a = new String("Esto es un objeto String");

b = new String("Esto es otro objeto String");

a.test = 10;

la propiedad test no queda definida para b ni para el resto de los string del script. Esta
es la única diferencia entre los objetos string creados con new y los string literales.

Anexo 2: JavaScript / 346


M étodos:

Algunos de los métodos del objeto String facilitan la inclusión de etiquetas HTML en
las cadenas de texto. No tendremos en cuenta estos métodos, ya que la creación de
páginas Web no es el objeto de este documento. En los métodos siguientes string
puede ser un objeto String o un literal.

string.charAt(índice) - retorna el carácter en la posición especificada por índice. El


índice esta en el rango de 0 a string.length

string.charCodeAt(índice) - retorna el código Unicode correspondiente al carácter


que se encuentra en la posición especificada por índice.

string1.concat(string2) - retorna un objeto String igual a la concatenación de


string1 y string2.

String.fromCharCode (code1, code2, code2,...) - crea un string desde los códigos


Unicode que recibe

string.indexOf(substring, [índice]) - encuentra la primera ocurrencia del substring


en string comenzando la búsqueda en la posición índice. Si no se especifica un
índice se comenzará la búsqueda en el primer carácter. Retorna un entero
indicando la posición de comienzo de substring dentro del objeto string. Si el
substring no se encuentra retorna -1.

string.lastindexOf(substring, [índice]) - es idéntico al método indexOf exceptuando


que la búsqueda se realiza de derecha a izquierda en vez de izquierda a derecha,
retornando la posición de la última ocurrencia del substring en string.

string.slice(inicio, [fin]) - crea un objeto String conteniendo los caracteres de string


comprendidos entre las posiciones inicio y fin. Si fin es negativo indica un
desplazamiento desde el final de string.

string.split(separador) - crea un array en que cada elemento es un string


conteniendo los caracteres que resultan de dividir string en cada punto donde
contiene el carácter separador.

string.substr(inicio, [longitud]) - retorna un string conteniendo los caracteres de


string desde la posición inicio y con la longitud especificada. Si no se especifica la
longitud retornará hasta el último carácter.

string.substring(inicio, [fin]) - retorna un substring de string conteniendo los


caracteres entre las posiciones inicio y fin.

string.toLowerCase() - convierte los caracteres de string a minúsculas.

string.toUpperCase() - convierte los caracteres de string a mayúsculas.

string.toString() - retorna el valor de string.

string.valueOf() - retorna el valor de string.

Ejemplos:
var s = "ABCDEFG".charAt(3); // s valdrá D

Guía de referencia de lenguaje JavaScript / 347


var n = "ABCDEFG".charCodeAt(3); // n valdrá 68 que es el código Unicode del

carácter D

var str1 = "ABCDEFGHIJKLM"

var str2 = "NOPQRSTUVWXYZ";

var s = str1.concat(str2); // s valdrá "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

var s = String.fromCharCode (68); // s valdrá "D"

var n = "ABCDEFG".indexOf ("CDE"); // n valdrá 2

var s = "ABCDEFGH".slice (2, 4); // s valdrá "CD"

/* En el siguiente ejemplo, la variable a será un array con los elementos a[0] =

"El", a[1] = "perro", ...

var a = "El perro de San Roque no tiene rabo".split(" ");

var s = "ABCDEF".substr (2, 3); // s valdrá "CDE"

Fechas y horas. El objeto Date


La funcionalidad relacionada con unidades temporales de fecha y hora son
suministradas por el objeto Date de JavaScript.

Una variable que contenga una fecha, o sea un objeto de tipo Date, almacena un
valor numérico que expresa el número de milisegundos (miles de segundos)
transcurridos desde medianoche (00:00:00) del día 1 de enero de 1970 (1/1/1970).
Las diferencias temporales se expresan igualmente en esta unidad, de forma que un
día tiene 86.400.000 milisegundos.

El rango de fechas que puede ser representado por un objeto Date es


aproximadamente de 285.616 años anteriores o posteriores al uno de enero de 1970.

JavaScript proporciona la funcionalidad para manejar las unidades temporales


estándar llamadas Uneversal Coordinated Time, UTC. Mas conocido como Greenwich
Meridian Time, GMT. Teniendo por tanto en cuenta la diferencia horaria de los
distintos sistemas que ejecutan el script.

El constructor del objeto Date admite tres sintaxis distintas:

var fecha = newDate();

La variable fecha tendrá un valor que representa la fecha y hora local en el


momento de ser creada. Si en el momento de crear la variable son las 20:53:22
del viernes 3 de agosto del 2001 la representación textual de fecha, retornada por
el método toString, será Fri Aug 3 20:53:22 UTC+0200 2001.

var fecha = newDate(ValordeFecha);

Siendo ValordeFecha un valor numérico, representando el valor en milisegundos


en UTC entre la fecha especificada y el 1/1/1970 a las 00:00:00. También puede
ser un string que será analizado por el método parse que se explica a
continuación.

Anexo 2: JavaScript / 348


var fecha = newDate(año, mes, día, [horas,[minutos, [segundos, [milisegundos]]]]);

El año se expresará con cuatro dígitos, el mes será un entero entre 0 y 11


correspondiendo el 0 a enero y el 11 a diciembre, el día es un entero entre 1 y
31, la horas es un entero de 0 a 23 (de medianoche a 11 pm), los minutos y
segundos se expresan como un entero de 0 a 59, los milisegundos como un entero
de 0 a 999.

El objeto Date tiene dos métodos estáticos que pueden ser llamados sin necesidad de
crear un objeto Date. Estos son: parse y UTC.

El método parse analiza un string que contiene una fecha, y retorna el número de
milisegundos entre dicha fecha y el 1/1/1970 a las 00:00:00.

Date.parse (ValordeFecha);

El método UTC retorna el número de milisegundos entre el 1/1/1970 a las 00:00:00


UTC y la fecha que recibe como argumento.

Date.UTC (año, mes, día, [horas,[minutos, [segundos, [milisegundos]]]]);

El valor retornado puede ser utilizado como argumento para el constructor de un


objeto Date y en el método setTime.

M étodos:

fecha.getDate() - retorna el día del mes almacenado en el objeto fecha según la


hora local.

fecha.getDay() - retorna el día de la semana almacenado en el objeto fecha según


la hora local. El valor retornado es un entero de 0 a 6 correspondiendo a los días
de la semana del domingo al sabado.

fecha.getFullYear() - retorna el año almacenado en el objeto fecha según la hora


local.

fecha.getHours() - retorna un entero entre 0 y 23 indicando el número de horas


desde la medianoche almacenadas en el objeto fecha según la hora local.

fecha.getM illiseconds() - retorna un entero entre 0 y 999 indicando el número de


milisegundos almacenados en el objeto fecha según la hora local.

fecha.getM inutes() - retorna un entero entre 0 y 59 indicando el número de


minutos almacenados en el objeto fecha según la hora local.

fecha.getM onth() - retorna un entero entre 0 y 11 indicando el mes almacenado


en el objeto fecha según la hora local.

fecha.getSeconds() - retorna un entero entre 0 y 59 indicando los segundos


almacenados en el objeto fecha según la hora local.

fecha.getTime() - retorna un entero representando el número de milisegundos


entre las 00:00:00 del 1 de enero de 1970 y la fecha y hora almacenada en el

Guía de referencia de lenguaje JavaScript / 349


objeto fecha. El rango es aproximadamente de 285.616 años anteriores y
posteriores al 1/1/1970. Los números negativos indican fechas anteriores a
1970.

fecha.getTimezoneOffset() - retorna un entero representando el número de


minutos entre la hora en la máquina en la que se ejecuta y la hora UTC.

fecha.getUTCDate() - retorna el día del mes almacenado en el objeto fecha según


la hora UTC

fecha.getUTCDay() - retorna el día de la semana almacenado en el objeto fecha


según la hora UTC.

fecha.getUTCFullYear() - retorna el año almacenado en el objeto fecha según la


hora UTC.

fecha.getUTCHours() - retorna un entero entre 0 y 23 indicando el número de


horas desde la medianoche almacenadas en el objeto fecha según hora UTC.

fecha.getUTCM illiseconds() - retorna un entero entre 0 y 999 indicando el


número de milisegundos almacenados en el objeto fecha según la hora UTC.

fecha.getUTCM inutes() - retorna un entero entre 0 y 59 indicando el número de


minutos almacenados en el objeto fecha según la hora UTC.

fecha.getUTCM onth() - retorna un entero entre 0 y 11 indicando el mes


almacenado en el objeto fecha según la hora UTC.

fecha.getUTCSeconds() - retorna un entero entre 0 y 59 indicando los segundos


almacenados en el objeto fecha según la hora UTC.

fecha.setDate(día) - asigna un nuevo día del mes a la fecha almacenada en fecha


según la hora local.

fecha.setFullYear(año, [ mes, [ día]]) - asigna un nuevo año a la fecha almacenada


en fecha, opcionalmente se puede establecer un mes y un día del mes según la
hora local.

fecha.setHours(horas, [ minutos, [ segundos, [milsegundos]]]) - asigna un hora a la


fecha almacenada en fecha, según la hora local, opcionalmente se pueden
establecer los minutos, segundos, y milisegundos.

fecha.setM illiseconds(milsegundos) - asigna milisegundos a la hora almacenada


en fecha, según la hora local.

fecha.setM inutes( minutos, [ segundos, [milsegundos]]) - asigna minutos a la hora


almacenada en fecha, según la hora local, opcionalmente se pueden establecer
los segundos, y milisegundos.

fecha.setM onth( mes, [ valordefecha]) - asigna el mes a la fecha almacenada en


fecha, según la hora local, opcionalmente se pueden establecer un varordefecha.
El valor del mes estará comprendido entre 0 y 11.

fecha.setSeconds(segundos, [milsegundos]) - asigna el número de segundos a la


hora almacenada en fecha, según la hora local, opcionalmente se pueden

Anexo 2: JavaScript / 350


establecer los milisegundos.

fecha.setTime(milsegundos) - asigna una fecha y hora al objeto fecha,


milisegundos expresa el número de milisegundos desde medianoche del
1/1/1970. Es independiente de la zona horaria.

Los métodos setUTCDate, setUTCFullYear, setUTCHours, setUTCM illiseconds,


setUTCM inutes, setUTCM onth, setUTCSeconds son equivalentes a los vistos
anteriormente pero utilizan la hora UTC en vez de la hora local.

fecha.toUTCString() - convierte la hora a un string en coordenadas UTC.

Ejemplos:

/* El siguiente ejemplo ilustra es uso del método getTimezoneOffset */


function TZDemo()

var d, tz, s = "La hora local actual es ";

d = new Date();

tz = d.getTimezoneOffset();

if (tz < 0)

s += tz / 60 + " horas anteriores GMT";

else if (tz == 0)

s += "GMT";

else

s += tz / 60 + " horas posteriores GMT";

return(s);

var fecha = new Date(2001, 8, 6); // 6/8/2001

fecha.setDate(33); // almacenará 2 de septiembre en fecha

Funciones con un número variable de argumentos. Objeto Function


Existen dos sintaxis para definir funciones:
function functionname( [argname1 [, ... argnameN]] )

body

var functionname = new Function( [argname1, [... argnameN,]] body );

La primera sintaxis crea una función que será convertida a un objeto Function
cuando sea necesario. La segunda sintaxis crea un objeto Function que será

Guía de referencia de lenguaje JavaScript / 351


convertido en un valor de función en el momento que la función es llamada. Esta
segunda sintaxis crea el objeto Function explícitamente.

El objeto Function tiene una propiedad en su prototipo llamada arguments. Se trata


de una matriz que permite conocer los argumentos pasados a la función. De este
modo es posible crear funciones polimórficas que permiten responder de distinta
forma ante los distintos argumentos que recibe.

Veamos una función que permite sumar los números que recibe como argumentos,
independientemente del número de ellos que reciba:
function Suma ()

var suma=0;

for (i=0; i < Suma.arguments.length; i++)

suma += Suma.aguments[i];

return suma;

Otra propiedad del objeto Function es caller, que contiene una referencia a la
función que ha llamado a la actual. Si la función es llamada desde el primer nivel del
script, caller será null, pero en caso de ser llamada desde otra función, caller
contendrá una referencia a dicha función.

El objeto Global
Es un objeto intrínseco de JavaScript que almacena los métodos globales. Este objeto
no se utiliza nunca directamente, y no puede crearse usando el operador new. Se
crea automáticamente, igual que el objeto Math, el inicializar el motor interprete del
script, por los que sus métodos y propiedades están siempre disponibles.

M étodos:

eval (códigostring) - el argumento códigostring es un objeto String que contienen


sentencias de código JavaScript. Este string es analizado y ejecutado en el
mismo contexto que la llamada a eval.

isFinite (número) - determina si número tiene un valor finito, retorna true si


número es cualquier valor distinto de NaN, de infinito negativo, e infinito positivo.
En estos tres casos retorna false.

isNaN (número) - retorna true si número contiene el valor reservado NaN (not a
number) y false en caso contrario. Alternativamente podría compararse número
consigo mismo, se no es igual significa que su valor es NaN, esto es así porque
NaN es el único valor que no es igual a sí mismo.

parseFloat(stringnúmero) y parseInt(stringnúmero) - convierten el string que


reciben como argumento en un número de coma flotante o entero
respectivamente.

Anexo 2: JavaScript / 352


Ejemplos:

/* el siguiente ejemplo crea un objeto Date llamado mifecha, conteniendo la


fecha y hora local del sistema en el momento de ser creada */
eval ("var mifecha = new Date ();");

parseFloat ("abc"); // retorna NaN

parseFloat ("1.2abc"); // retorna 1,2

Guía de referencia de lenguaje JavaScript / 353


Extensión COM: Introducción
Los programas con extensión .xjs (eXtended JavaScript) son archivos de texto plano que
contienen instrucciones en lenguaje JavaScript e instrucciones suministradas por las
extensiones que la Aplicación hace a JavaScript. La ventana informes y procedimientos
suministra una lista de los programas xjs incorporados, pudiendo añadir nuevos
programas para obtener informes personalizados o ejecutar procedimientos no incluidos
en la Aplicación.

Pueden editarse con cualquier editor, por ejemplo con el Bloc de Notas de Windows. La
Aplicación suministra un editor al que se accede desde la ventana informes y
procedimientos con el botón Programa de la barra de botones. Este editor utiliza colores
distintos para las constantes, las palabras reservadas, y las líneas de comentario, lo que
ayuda a la lectura del código.

El lenguaje JavaScript carece de la funcionalidad necesaria para interactuar con el


usuario, se utiliza fundamentalmente para añadir contenidos a las páginas Web,
incluyendo su código en páginas htm. Siendo en este caso el navegador de Internet el
que suministra los objetos para poder interactuar con el usuario. Es decir, JavaScript
no tiene sentencias que permitan mostrar información en pantalla o solicitar datos en
campos que tendrá que teclear el usuario.

Es por esto que la Aplicación suministra extensiones a JavaScript para poder obtener
informes que se visualizarán en pantalla o impresora, estas extensiones se han
dividido en tres grupos: extensiones básicas que suministran métodos para manejo de
fechas, para mostrar diálogos en pantalla, ejecutar otras aplicaciones, etc.; extensiones
de impresión que facilitan la tarea de dar formato a los informes, y extensiones de
acceso a base de datos que permiten comunicarse con las tablas para poder extraer la
información.

Las extensiones a JavaScript se han desarrollado utilizando la tecnología COM


(Component Object Model) de Microsoft. Esta tecnología define estándares y disciplinas
de programación para poder resolver la interactividad entre distintos componentes
software.

Extensión COM: Introducción / 355


Así como en el mercado electrónico existe la tecnología plug and play (conectar y
funcionar) que hace posible la comunicación entre componentes hardware. La
tecnología COM pretende facilitar la comunicación entre componentes software
desarrollados en distintos lenguajes de programación y con distintas herramientas. El
principal impedimento para esta comunicación es resolver las diferencias entre los
sistemas de tipos de datos, ya que los componentes software tienen diferentes reglas
para la generación de nombres de símbolos, alineamiento en memoria, distintas
convenciones para llamadas a funciones y paso de parámetros, etc.

Un componente es un tipo de datos abstracto estándar a partir del cual el programador


puede definir sus propios tipos de forma que sean universalmente entendidos a través
de los lenguajes de programación.

Dado que la Aplicación almacena sus datos en bases de datos SQL (Structured Query
Languaje), las extensiones a JavaScript para acceso a datos utilizan SQL como lenguaje
para comunicarse con la base de datos, por lo que es necesario tener algunas nociones
del mismo, en particular conocer la sentencia SELECT, que permite recuperar la
información de la base de datos.

Por último, se necesita conocer la estructura de la base de datos es decir, los nombres
de campos, las tablas y relaciones entre tablas, para construir las sentencias SELECT
que leerán los datos a procesar.

Uno de los métodos de las extensiones básicas es writeline, este método manda el texto
que recibe como argumento a un archivo de texto llamado presenta.txt, que se
almacena en el directorio o carpeta Temporal. Al terminar la ejecución del programa xjs
se abrirá el Bloc de Notas de Windows mostrando dicho archivo de texto, lo que permite
comenzar a realizar pruebas sin conocer aún las extensiones de impresión.

Cree un nuevo programa, como se explica en el tema ventana de Programa, y según va


adquiriendo conocimientos sobre JavaScript y sobre las extensiones COM comience a
practicar utilizando el método writeline.

Anexo 2: JavaScript / 356


Extensión COM: Objetos y métodos básicos
Propiedades

Métodos

Componentes extendidos de JavaScript


En este apartado se recoge parte de la información actualmente disponible sobre
programación de informes, de forma muy sucinta pero completa. La parte
correspondiente a formato de campos, modificadores y, en general, construcción de
las páginas, la encontrará en objetos para imprimir.

En la guía paso a paso, hay un capítulo dedicado sólo a la creación y modificación de


informes, ejemplos de las personalizaciones más comunes, así como multitud de
informes de ejemplo impresos para que le sirvan como catálogo de muestra.

TODAS las explicaciones dadas en este anexo se refieren a las AMPLIACIONES que el
programa hace sobre el lenguaje estándar JavaScript (nuevos objetos, métodos y
propiedades). La sintaxis, funciones, métodos y utilización del propio lenguaje no se
toca en ningún momento, y hay un archivo de ayuda en línea que puede consultar
para ese fin.

Métodos, propiedades y objetos generales ó básicos


En primer lugar, vamos a ver un conjunto de variables globales definidas en la
ventana informes y procedimientos, que nos ofrecen el contenido de ciertos campos:

Código Raíz, se almacena en la variable raíz. Cuando recorremos la estructura de la


B.D., por defecto se hace completamente desde el concepto raíz (.) hacia abajo. Este
campo permite comenzar el recorrido a un nivel inferior, para recorrer sólo una parte
de la estructura.

Máscara de códigos, se almacena en la variable mascara. Excepto en informes muy


particulares que se refieren sólo a ciertos grupos de conceptos por su código, no se
suele filtrar por códigos. Poniendo una máscara en este campo, los recorridos por
estructura pueden mostrar sólo los conceptos que cumplan la máscara. Por supuesto,

Extensión COM: Objetos y métodos básicos / 357


no todos los informes y procedimientos admiten este filtro (por ejemplo si el informe
ya tenía otro filtro, prevalece aquel), y no en todos tiene sentido este filtro.

Fecha Inicial, se almacena en la variable fecini. Permite establecer la fecha o el


periodo a considerar en los informes que trabajen con fechas. La introducción de
datos en este campo, pone los datos más previsibles en el siguiente, para establecer
el periodo a considerar de la forma más cómoda. En cambio, al modificar fecfin, no se
vuelve a proponer la de inicio.

Fecha Final, se almacena en la variable fecfin. Establece el final del periodo a


considerar para el informe, desde la fecha de fecini. Al introducir un valor en Fecha
Inicial, siempre se propone este otro.

En caso de no introducir ningún dato en fecini, los informes que funcionan con
fechas suelen asignar una fecha de defecto (normalmente la del día actual). Pero si
se introduce cualquier número en la fecha inicial, se rellena la fecha comenzando
por la izquierda para poner una fecha completa, también en fecfin:

Tecleado en F.
Fecha inicial Fecha Final
INI

12/10/2003 (*) 12/10/2003

3 01/01/2003 01/01/2004

1103 01/01/1103 01/01/1104

2/04 01/02/2004 01/03/2004

131190 13/11/1990 14/11/1990

110204 11/02/2004 12/02/2004

(*) Suponiendo que la fecha del día de hoy fuese 12/10/2003

Número primera página, se almacena en la variable pagact y representa el número


que llevará impreso (en caso de que se imprima) la primera página del informe, en
vez de "1".

Páginas a imprimir (n-n), es un rango que se almacena en las variables pagpri y


pagult, que indica las páginas que se van a imprimir, basados ambos en la
numeración de pagact, por lo que normalmente, el primer número del rango (pagpri)
siempre debería ser mayor o igual que pagact. Por ejemplo:

Nº primera Páginas a
Resultado, imprime:
página imprimir
3- de la página 3 a la última, comenzando en 1
3-6 de la página 3 a la 6 (incluidas), comenzando en 1
-8 hasta la página 8 (incluida), comenzando en 1
4 1-2 todas las páginas (ignora el rango), comenzando con el nº 4
4 1-4 sólo la pág. 4, con el nº 4
10 15- desde la quinta pág. del informe, comenzando con el nº 10

Anexo 2: JavaScript / 358


**************************

Como nomenclatura de la documentación de métodos, objetos, funciones,


modificadores, etc. utilizaremos el siguiente convenio:

fecha - El argumento fecha debe corresponder a un número de la forma


AAAAMMDD (año con cuatro dígitos, mes del año con dos dígitos, y día del mes con
dos dígitos), por ejemplo el veinte de abril del 2003 se expresa con el número
20030420.

cadena - texto, función que devuelva un texto o cadena de caracteres

camino y archivo - nombre de camino de directorio relativo o absoluto y nombre de


archivo (a veces con extensión o no, según se explique). Tenga en cuenta que el
carácter barra ' \' es un carácter especial por lo que debe figurar dos veces. Por
ejemplo "c:\\Documentos\\archivo.txt"

Otra variable relacionada con el número de páginas es pagtotal, que calcula una
primera vez el informe entero, para obtener el número de páginas que tiene, y lo
almacena en esta variable global.

ingra: Es el objeto motor por defecto. De él parten los demás objetos, pero no hace
falta especificarlo, ya que es el de defecto, y no aparecerá en ninguna de nuestras
sentencias.

Objetos derivados
Cmapi - asignado a una variable, crea un objeto de tipo correo electrónico, que
permite enviar, recibir y recuperar datos de correos electrónicos. Vea los métodos de
estos objetos en Objetos y métodos de ingra.

Chor - asignado a una variable, crea un objeto de tipo fecha-hora, que permite
gestionar operaciones complejas con fechas (como calcular periodos, restar o sumar
días a fechas, calcular fechas sumando horas,etc.). Vea los métodos de estos objetos
en Objetos y métodos de ingra

Propiedades
erro - es una cadena de caracteres que almacena el último mensaje de error que se
ha producido en la ejecución el programa xjs.

hoy - almacena un número que representa la fecha actual del sistema en el que se
ejecuta el programa, en formato aaaammdd. Esta propiedad puede utilizarse como
argumento de los métodos de manejo de fechas. Por ejemplo, si hoy es viernes 10 de
agosto del 2001, el método fecha (hoy, "dd-mm-aaaa") devolverá 10-08-2001.

programa - devuelve el nombre de la aplicación, para rotularlo o comprobarlo.

Métodos
debug - esta sentencia detiene la ejecución del programa y abre el diálogo de
depuración. En la línea Comando o variable se pueden especificar: un sentencia
válida de JavaScript incluyendo las extensiones, o bien un nombre de variable. Al

Extensión COM: Objetos y métodos básicos / 359


hacer clic en Acepta se ejecutará la sentencia, y su valor de retorno si lo hubiera se
mostrará en el visor del diálogo, si se teclea un nombre de variable aparecerá en el
visor el valor actual de esa variable.

Si teclea por ejemplo Math.E, al hacer clic en Acepta aparecerá en el visor el


número 2.71828182845905 que es el número de Euler.

El depurador guarda un histórico de los comandos ejecutados, pudiendo acceder a


ellos con los botones Anterior y Siguiente.

debugger - si se tiene instalado el entorno de desarrollo Visual Studio .NET, con


herramientas para depuración JavaScript, al producirse un error, podemos
depurarlo bajo el entorno, lo que nos permite establecer puntos de parada, examinar
variables, recorre librerías...

Para trabajar con diálogos:

diaavisa (título, texto) - abre un diálogo con el icono de AVISO, título es la cadena de
texto que figurará en el título del diálogo, y texto el mensaje. Al hacer clic en el
botón Acepta continuará la ejecución del programa. Vea también el método inter()

diaedita (título, texto[, defecto]) - abre un diálogo con un campo editable, título es la
cadena de texto que figurará en el título del diálogo, y texto es la cadena de texto
que figura como mensaje del diálogo, defecto es el contenido que por defecto tendrá
el campo de edición. Retorna el valor del campo de edición cuando se pulsa el botón
Acepta, y retorna el valor NULL (nulo) al pulsar Cancela.

diaerror (texto) - muestra un diálogo de error con el mensaje texto y el título ERROR.
Al pulsar el botón Cierra continuará la ejecución del programa.

diainforma (título, texto) - abre un diálogo con el icono de INFORMACIÓN, título y


texto son las cadenas de texto que figuran en el diálogo. Es análogo a diaavisa

diapregunta (título, texto) - abre un diálogo con icono de INTERROGACIÓN. Análogo


a diaavisa y diainforma

Para trabajar con directorios:


director ([archivo][, extensión]) - retorna el nombre del directorio o carpeta en la que
funcionan los archivos particulares del programa. Si se trata de una instalación en
red, retorna el directorio de la instalación cliente o directorio privado. Si es una
instalación monousuario retorna el directorio de instalación de la aplicación. Si se
suministran los dos argumentos, los devolverá concatenados al nombre del
directorio en la forma: "directorio\archivo.extensión".

dirmaslee (directorio, opciones)- devuelve una lista con la información seleccionada


del directorio directorio, con las opciones. directorio, es una cadena de texto con el
directorio donde se quieren buscar archivo o directorios. Las opciones pueden ser:
(o) archivos, (1) directorios, (2) ambos

filcamino (base, archivo, [extensión] | archivo)

filnombre (base, archivo, [extensión] |

filextension

Anexo 2: JavaScript / 360


publico ([archivo][, extensión]) - retorna el nombre del directorio o carpeta de
instalación de la aplicación visible en la ventana Opciones. Si se trata de una
instalación en red este será el directorio de la instalación en el servidor, si es una
instalación monousuario este será el directorio de instalación de la aplicación en
el disco local. Si se suministran los argumentos archivo y extensión, devolverá estos
dos argumentos concatenados al nombre del directorio en la forma:
"directorio\archivo.extensión".

temporal ([archivo][, extensión]) - retorna el nombre del directorio o carpeta utilizado


para almacenar los archivos temporales. Por defecto es un directorio
llamado \TEMPORAL que se encuentra en el directorio privado de instalación (es
decir el directorio de la instalación cliente o el de la instalación monousuario). Si
se suministran los argumentos, los devolverá concatenados al nombre del
directorio en la forma: .\Temporal\archivo.extensión. Por ejemplo: temporal ("salida.
txt") retorna ...\Temporal\salida.txt, equivale a temporal ("salida", "txt")

trabajo ([archivo][, extensión]) - retorna el nombre del directorio o carpeta de trabajo.


Por defecto este es el directorio privado, es decir, el de la instalación cliente o
monousuario. Si se suministran los argumentos, los devolverá concatenados al
nombre del directorio en la forma: directorio\archivo.extensión.

Para trabajar con fechas:


fecha (número | fecha[, formato]) - devuelve una cadena de texto representando la
fecha almacenada en número. También admite como primer argumento, un
número que represente una fecha, para formatear. Si no se especifica el
argumento formato, la cadena de texto retornada contendrá la fecha en el formato
que se especifique en la ventana Opciones, en el campo formato de fechas. Si no
se especificó ninguno, se utilizará el formato de fecha por defecto, es decir dd/
mm/aaaa. Los formatos reconocidos, y que se pueden combinar, para las fechas
son los siguientes:

dd - número del día del mes.

ddd - tres primeras letras del nombre del día de la semana: Lun, Mar, Mié, Jue,
Vie, Sab, Dom.

dddd - nombre del día de la semana: Lunes, Martes, etc.

mm - número del mes de 1 a 12.

mmm - tres primeras letras del nombre del mes: Ene, Feb, Mar, etc.

mmmm - nombre del mes: Enero, Febrero, etc.

aa - dos últimos dígitos del año.

aaaa - año expresado con cuatro dígitos.

fecdia ([fecha]) - devuelve el valor numérico correspondiente al día del mes de la


fecha. Si no se especifica el argumento fecha, da el día del mes de la fecha del
sistema.

fecdias (fechaini, fechafin[, fechaestudio]) - devuelve el número de días


comprendidos entre las fechas fechaini y fechafin ambos incluidos. Si se especifica

Extensión COM: Objetos y métodos básicos / 361


el argumento fechaestudio, retornará el número de días del intervalo entre fechaini
y fechafin comprendidos en el MES de la fechaestudio. Por ejemplo: fecdias
(20010101, 20010202) devuelve el valor 33, mientras que fecdias (20010101,
20010202, 20010208) devuelve 2, que son los días entre el uno de enero y el dos de
febrero comprendidos en el mes de febrero.

fecdianombre ([fecha]) - devuelve el nombre del día de la semana correspondiente


a fecha. Si no se especifica el argumento fecha, retorna el nombre del día de la
semana correspondiente a la fecha del sistema.

fecmesnombre ([fecha]) - análoga a fecdianombre, devuelve el nombre del mes


correspondiente a fecha. Si no se especifica el argumento, devuelve el nombre del
mes de la fecha actual.

fecmes ([fecha]) - devuelve el número del mes correspondiente al valor de fecha


fecha. Si no se especifica el argumento fecha, da el número del mes de la fecha del
sistema.

fecmesdias ([fecha]) - devuelve el número de días del mes correspondiente a fecha.


Si no se especifica el argumento fecha, da el número de días del mes
correspondiente a la fecha del sistema.

fecano ([fecha]) - devuelve el año correspondiente a fecha. Si no se especifica fecha


retorna el año correspondiente a la fecha establecida en el sistema en que se
ejecuta el programa.

fecsemdia ([fecha]) - devuelve el número del día de la semana correspondiente a


fecha. El 0 corresponde al lunes, el 1 al martes, etc. Si no se especifica el
argumento fecha, da el número del día de la semana de la fecha del sistema.

Para trabajar con gráficos:


Para utilizar estos objetos simplemente hay que inicializar sus propiedades y
pasarlos como argumento del método campo del objeto Cimp. Este objeto impresor
interpretará los valores asignados a Cgrf, y dibujará el gráfico en el campo actual,
como si fuese una especie de "foto", aplicando los modificadores de formato que se
especifiquen. Vea los métodos de estos objetos en Objetos y métodos de ingra.

Los objetos de deben crear uno por cada gráfico distinto a representar en una
misma línea, (los objetos no se liberan hasta que se imprime una línea sin
bloqueo), pero en cada línea o bloque de líneas se deben reutilizar los mismos
objetos.

Cgrf - asignado a una variable, crea un objeto de tipo gráfico estadístico, al que se
le pasan los datos a representar, y el formato. Permite mostrar gráficos de líneas,
de barras y de tarta.

Cima - crea un objeto de tipo imagen o gráfico vectorial. El gráfico es


independiente de base de datos (externo)

bas.Cima - crea un objeto imagen (mapa de bits) o gráfico vectorial, a partir de


datos de gráficos en la base de datos (vinculados o incrustados). A través de los
métodos de ese tipo de objetos podemos leer archivos de la base y grabarlos como
externos o viceversa, e imprimirlos.

Anexo 2: JavaScript / 362


bas.Cmap - crea un objeto gráfico de tipo mapa, con datos de conceptos Tipo mapa.

Cuando se lanzan estos objetos a salida en archivo (formato RTF), el documento


recibe un EMF como si fuese una foto para incrustar en el código RTF.

Para trabajar con formularios (Objeto dialogo):


Es el objeto especializado en la creación de formularios interactivos. Una
referencia a este objeto se obtiene como sigue:

var dia = dialogo();

Los métodos texto, opcion y campo permiten agregar controles al diálogo:


etiquetas de texto, botones de opción y campos de edición respectivamente. Los
controles se colocarán unos debajo de otros en el mismo orden en que son
invocados los métodos que los crean.

El formulario resultante será una ventana que contiene: barra de título incluyendo
el botón de control y el botón de cierre, y dos botones en la barra inferior: Acepta,
Cancela. Esta ventana es redimensionable horizontalmente, al variar el ancho de
la ventana variará el ancho de los controles que incorpora.

El método texto incluirá una etiqueta en el formulario. Recibe la cadena de texto a


mostrar y como segundo argumento modificadores de formato aplicables al texto. La
lista modificadores de formato se puede consultar en el epígrafe referencia del
objeto diálogo. Por ejemplo:

dia.texto ("Especificar los siguientes datos", "l2j1");

El método campo añade campos de edición al formulario. Puede recibir de uno a


tres argumentos: número identificador del control dentro del formulario, etiqueta
de texto descriptiva que acompaña al campo de edición, ancho relativo con el que
se mostrará el campo de edición. El identificador del control servirá para
referenciar el control al recuperar su valor mediante el método valor. Por ejemplo:

dia.campo (200, "Fecha de asiento", 5)

El método campoM crea igualmente un campo de texto, pero en este caso


multilínea, con una barra de desplazamiento vertical. Recibe igualmente: un
identificador, una cadena de texto para la etiqueta del control, opcionalmente un
número que determina el ancho del campo (por defecto es 10), y opcionalmente el
número de líneas o altura del control (por defecto son 4). Por ejemplo:

dia.campoM (200, "Fecha de asiento", 5, 6)

El método opcion crea una casilla de verificación o un grupo de opciones


representadas por botones de radio. Recibe dos argumentos: el primer argumento
es un número identificador del control, el segundo es una cadena de texto.

Si la cadena de texto que recibe como segundo argumento no contiene el carácter


punto y como (;), creará una casilla de verificación utilizando esta cadena de texto
como etiqueta para la casilla. En caso contrario, creará un grupo de opciones de
botones de radio, tomando como etiqueta de cada botón el texto comprendido hasta
el carácter punto y coma.

Extensión COM: Objetos y métodos básicos / 363


La siguiente sentencia muestra como crear un grupo de opciones, identificado por
el número 10, con cuatro botones de radio etiquetados como: Fecha de hoy, Fecha
de vencimiento, Fecha de emisión, Fecha especificada en el siguiente campo.

dia.opcion (10, "Fecha de hoy;"+

"Fecha de vencimiento;"+

"Fecha de emisión;"+

"Fecha especificada en el siguiente campo")

La primera de las opciones corresponde al valor cero, la segunda al uno, etc. Es


decir, el método valor retornará 0, 1, 2, etc., según la opción seleccionada.

Si en lugar de opcion se invoca opcionL se incluirá una caja combinada, éste


método recibe tres o cuatro argumentos, el segundo es la etiqueta para el control, y
el tercero una lista de opciones separadas por punto y coma(;), y además puede
recibir un argumento para especificar su tamaño horizontal. Por ejemplo:

dia.opcionL (10, "Fecha", "Fecha de hoy;"+

"Fecha de vencimiento;"+

"Fecha de emisión;"+

"Fecha especificada en el siguiente campo", 5)

En este caso el método valor retorna el texto de la opción seleccionada, por ejemplo
"Fecha de emisión" si ha seleccionado la tercera opción.

El método ayuda permite establecer un enlace con un tema de ayuda de los


existentes en el archivo de ayuda de la aplicación. Este método añadirá en la barra
de botones del diálogo el botón Ayuda, que al ser pulsado por el usuario abrirá el
archivo de ayuda en el tema que recibe como argumento. Por ejemplo:

dia.ayuda ("Sigrid/facconta.htm")

El método seleccion asocia a un campo la posibilidad de suministrar en él una


máscara de búsqueda, para abrir la lista de selección de registros relacionados con
el campo que se está editando. Por ejemplo:

dia.campo (300, "Serie para el asiento:", 5)

dia.seleccion (300, "TIPASI.series") // permite abrir la lista de selección


de series de asientos

Por ejemplo:

dia.seleccion (300, "auxcob.cod") // selección de forma de cobro por su código

dia.seleccion (300, "auxgas.res") // selección de tipos de gasto por su


resumen

dia.seleccion (300, "TIPCLI.cod") // selección de clientes por código

Anexo 2: JavaScript / 364


dia.seleccion (300, "TIPCLI.res") // selección de clientes por nombre

dia.seleccion (300, "TIPPAG.series") // selección de series de pagos

Una vez invocados estos métodos, el método crea mostrará el formulario en


pantalla. Recibe como argumentos el texto a mostrar en el título de la ventana, un
nombre que identifica la ventana y un tercer argumento que determina si se
almacenarán los datos de los controles del formulario:

var e= dia.crea ("Proceso", "venpru", 1)

Si el tercer parámetro es 1, se almacenarán en el archivo de inicio (.ini) de la


aplicación lo últimos valores especificados en los controles, de forma que la
siguiente vez que se ejecute el programa, el formulario aparecerá con estos
valores. Si por el contrario se especifica un 0 los campos de edición aparecerán a
blanco y el grupo de opciones tomará el valor cero (la primera opción será la
seleccionada).

El método valor retorna el valor almacenado en el control, cuyo identificador


recibe como argumento. Por ejemplo:

var fec0= dia.valor (10) // retorna en fec0 el valor del control identificado por 10

var fec1= dia.valor (200)

Este método puede también utilizarse para establecer valores en los controles. En
este caso recibe un segundo argumento que especifica el valor que se quiere
establecer.

var fec1= dia.valor (200, "01/01/2002") // establece el control de identificador


200 con el valor 01/01/2002

Los controles se irán añadiendo al diálogo uno debajo del otro, pero este
comportamiento puede modificarse utilizando el método grupo. Para indicar que los
controles se alinearán en horizontal o en vertical se invocará el método grupo, a
continuación se invocarán los métodos de definición de los controles (texto, campo,
opcion,...), y por último se invocará de nuevo el método grupo para indicar la
finalización del mismo. Por ejemplo:

var dia=dialogo

dia.opcionL (400, "Opciones", "opcion 1;opcion 2;opcion 3", 10)

dia.grupo ("H", "b2m4")

dia.grupo ("V")

dia.texto ("Multilínea", "l2")

dia.campoM (50, "", 20)

dia.grupo ()

dia.grupo ("V", "b2m4")

Extensión COM: Objetos y métodos básicos / 365


dia.campo (51, "Control A")

dia.campo (52, "Control B")

dia.grupo ()

dia.grupo ()

var e= dia.crea ("Prueba", "PRU",1)

Para abrir un grupo de controles se invoca a grupo con uno o dos argumentos, el
primero de ellos será la disposición de los controles del grupo, utilizando V y H para
especificar vertical y horizontal, el segundo argumento es opcional, y se trata de
modificadores de formato para determinar la anchura del borde del grupo y la
distancia desde el borde a los controles (margen interno). El modificador b establece
el tipo y grosor del borde, el modificador m determina el margen interno para que
los controles no queden pegados al borde.

El método grupo puede también ser invocado para crear pestañas en el diálogo,
consultar el epígrafe de referencia del objeto dialogo para conocer más detalles.

error ([cadena]) - finaliza la ejecución del programa con un diálogo de error. Si no se


suministra el argumento cadena se muestra en el diálogo el último mensaje de
error que se almacenó en la propiedad error, en caso contrario se muestra el rótulo.

formato (numero, [decimales]) - retorna una cadena de texto con el numero incluyendo
separadores de miles y separador decimal si procede. Si se especifica el argumento
decimales, retorna el numero redondeado a ese número de decimales

hora (hora) - devuelve

horas (hora1, hora2 [, fecha1, fecha2]) - devuelve

incluir (archivo) - incluye, en el momento de ejecutar el script, el contenido del


archivo que recibe como argumento dentro del código en ejecución, de forma que si
el contenido del archivo son sentencias JavaScript, estas serán ejecutadas en el
lugar donde se encuentra la sentencia incluir. El directorio por defecto
es \INFORMES, por lo que para incluir cabeceras y otros informes o librerías, no es
necesario poner ningún camino al archivo.

inter ([texto]) - durante la ejecución de los programas xjs se muestra siempre un


diálogo de interrupción que permite parar la ejecución del programa al pulsar el
botón Interrupción. En el caso de que el programa esté ejecutando un bloque de
sentencias, no se interrumpirá su ejecución hasta la finalización del bloque. Para
poder interrumpir la ejecución de un bucle, es necesario preguntar por el valor de
retorno de este método. Si se pulsó Interrupción el método inter retorna verdadero
(=1), en caso contrario retorna falso (=0). Si se da el argumento texto, en vez del
rótulo de puntos suspensivos (...), aparecerá el rótulo texto. (Vea también los
métodos dia???). Esta función es muy útil asociada a salir()

lc (cadena) - Considera el texto cadena para traducir, cuando se cambia de lenguaje


en la ventana opciones

lencmp (val1, val2, mapa) - Función de comparación entre 2 valores (por ejemplo

Anexo 2: JavaScript / 366


para aplicar como parámetro a la función sort de JavaScript), compara val1 con val2
cuando el orden que deseamos no es el habitual ASCII, sino que por ejemplo,
queremos ignorar mayúsculas y minúsculas, o ignorar acentos en la comparación,
etc. Devuelve los mismos valores que la función de comparación estándar: 1 si val1
es mayor (o anterior) a val2, -1 si es menor y cero si son iguales, comparando según
las distintas opciones de mapa de caracteres: (0)comparación estándar, (1)sólo
minúsculas acentuadas, (2)sólo mayúsculas acentuadas, (3)en bruto: todo
mayúsculas sin tildes ni diacríticos.

letra (numero) - devuelve una cadena de texto conteniendo el numero expresado en


letras. Redondea a 0 decimales y no imprime ningún rótulo de moneda. Para
trabajar con rótulos de monedas utilice moneda con el método letra. Por ejemplo
letra (28) devuelve "VEINTIOCHO".

notepad (archivo) - ejecuta el bloc de notas de Windows abriendo el archivo que recibe
como argumento. Si el archivo se encuentra en la carpeta de informes no es
necesario especificar el camino completo, en caso contrario tendrá que indicar la
ruta para encontrar el archivo.

prin (cadena) - Imprime la cadena en la ventana de depuración con un retorno de


línea incluido, es decir, imprime cada salida en líneas separadas

red (numero, decimales) - retorna un número igual al real numero, redondeado al


número de decimales indicado.

redcs (numero, decimales) - igual que red,

rtf2tex (textortf) - traduce el texto que recibe en formato de texto RTF (rich text
format ó formato de texto rico) a texto plano (ASCII) con retornos de carro.

salir ([numero]) - finaliza la ejecución del programa. Si numero=1, en vez de terminar


la ejecución del informe sin mostrar nada, mostrará lo que lleve procesado hasta el
momento de salir

windatos (archivo) - abre el archivo utilizando el programa, que según su extensión,


tenga asociado en el registro de Windows. Las asociaciones de extensiones de
archivos con los programas pueden modificarse o consultarse en las Opciones del
Explorador de Windows.

winejecuta (programa, archivo) - abre el archivo que recibe como argumento, con el
programa windows especificado. Tanto el nombre del programa ejecutable como el del
archivo han de especificarse por el nombre completo. Por ejemplo: winejecuta ("c:\
\windows\\notepad.exe", "c:\\temp\\doc1.txt");

write (valor) - graba el valor que recibe en el archivo presenta.txt en el


directorio \TEMPORAL. Todas las sentencias write de la ejecución de cada informe
se añaden una a continuación de otra. Cuando finaliza la ejecución del script, se
abre el archivo presenta.txt utilizando el Bloc de Notas de Windows. Esta instrucción
junto con writeline permiten mostrar información en pantalla sin tener que utilizar
el objeto impresor.

writeline (valor) - igual a write solo que además, graba un retorno de carro y nueva
línea al final de cada valor que recibe como argumento.

Extensión COM: Objetos y métodos básicos / 367


Extensión COM: Objetos y métodos para acceso a datos
Métodos de Ingra

Métodos de Cbas (base datos)

Métodos de Cima (imágenes bitmap)

Métodos de Cdxi (mapas vectoriales)

Métodos de Cgrf (gráficos estadísticos)

Métodos de Cmapi (correo electrónico)

Métodos de Chor (hora)

Métodos de dialogo (formularios)

Métodos, propiedades y objetos de acceso a la base de datos


Además del interface de acceso a los componentes básicos y a los de impresión,
tenemos propiedades, objetos y métodos extendidos particulares para el acceso a
datos.

Atención a la leyenda dentro de las explicaciones: Algunas funciones necesitar modo


edición [E] desde la ejecución del script, otras modo exclusivo [X] y otras ambos
modos.

Esquema de objetos de la aplicación:

Métodos de ingra (objeto base)


ingra es el objeto motor por defecto. De él parten los demás objetos, pero no es
obligatorio especificarlo, de hecho nunca aparecerá en nuestros programas
JavaScript. Además de objetos y métodos básicos y los vistos para programar
informes, para base de datos tenemos:

Cbas ([val | arc]) - Crea un objeto de tipo base, recuperando el objeto ingra
actual, (el archivo de base de datos que se tiene abierto). Sin parámetro, se
refiere a la base actual. Si se especifica un valor val: (0) se crea una instancia

Extensión COM: Objetos y métodos para acceso a datos / 369


de base nueva, (1) se considera la base en paralelo. El nombre y camino de
archivo arc es relativo al directorio de trabajo.

manvenlee (arc) - Redimensiona, distribuye y muestra las ventanas grabadas


en la configuración de ventanas arc

panabre (arc [,ruta][,paralelo]) - Carga en la ventana principal, el archivo de base


de datos arc, y opcionalmente muestra la posición en la B.D. a la que se llega a
través de la ruta, si existe. Si paralelo=1, se abre en la ventana paralela.

panauxcrea (tab) - Abre la ventana de Auxiliares con la tabla tab

pancierra () - Cierra la aplicación.

pandibuja ([val]) - Dependiendo del valor del parámetro val, refrescará la ventana
principal con: (5)archivo (4)edición, exclusivo, moneda, calculado (3)camino (2)
lista, padre (1)concepto (0)redibuja

panlinea (ide) - Selecciona la línea de ventana principal que tiene el ide


indicado (si está en la lista).

pannuecrea (tip [,cla][,ori] | tab) - Aparece un diálogo de Nuevo concepto del tipo
tip sin especificar clase de concepto, a menos que se indique cla. En vez del Tipo
, se puede especificar una tabla de propiedades

panpresenta (select [,cab]) | (liside [,cab][,rel]) - Realiza una búsqueda de


conceptos o relaciones y muestra el resultado en la ventana principal. Realiza la
búsqueda mediante la sentencia select de SQL. Opcionalmente puede formatear
la cabecera con el código de cabecera cab.

Con el segundo formato de parámetros, muestra la lista de identificadores liside,


como si fuese el resultado de una búsqueda. Opcionalmente se puede aplicar la
cabecera cab. Si rel =1 se presentan las relaciones superiores de las lista liside.

panproforzado ([tipo], [ide], foco, [crea]) - crea una ventana de propiedades y la


muestra con algunos datos y características pasados por parámetros: se le puede
dar el tipo de ventana o el identificador ide del concepto que queremos mostrar,
foco [0,1] (defecto=1) indica si la ventana coge el foco y crea[0,1], si hay que forzar
el crearla si no existe.

panprovirtual ([tipo], [ide], foco, [crea]) - Igual que la anterior, pero no bloquea
para el ide.

panrotcrea (rot | tab.cam) - Abre la ventana de Clasificaciones con el rótulo rot, o


bien se puede especificar el acceso al rótulo mediante la forma tabla.campo

panvenlee (ven) - Abre la ventana ven. Los nombres de ventanas son únicos para
cada una y tienen 3 letras

screjecuta (arc [,param]) - Ejecuta el código JavaScript incluido en el archivo arc,


y opcionalmente puede ir seguido de una lista de parámetros param separados
por comas. La función devuelve el número siguiente a la última página impresa
con la función. De esta forma se pueden lanzar varios informes seguidos con la
numeración consecutiva

Anexo 2: JavaScript / 370


Métodos de Cbas (objeto base de datos)
dbdao - [XE] Da acceso a todo el interface DAO, a través de asignar Cbas a un objeto
de tipo DAODatabase. Esto permite ampliar todo el acceso al objeto para realizar
acciones muy particulares o complicadas que nuestro interface no contemple

archivo - Camino del archivo de base de datos actual

actual ([val]) - Por defecto devuelve el identificador del concepto actualmente


seleccionado en ventana principal, con val (1) devuelve el identificador del padre del
actual

actuales ([rel][,sel]) - Devuelve una matriz de identificadores de conceptos, si rel=0 ó


de relaciones, si rel=1. Los conceptos son todos los que se están mostrando
actualmente en la ventana principal, si sel=0, o los multiseleccionados si sel=1. Los
valores por defecto son los valores 0.

bajonivel [0|1] - val=1 Pone el modo de grabación desde script a bajo nivel. Es decir,
las grabaciones en base de datos no pasarán bajo ningún control intermedio.

busca (select) - Realiza la búsqueda SQL y devuelve un objeto de tipo registro rec.

buscaactual (tipo[,clase]) - Devuelve el identificador del concepto actual si es del tipo


o clase especificados.

busca1 (select) - Realiza una búsqueda SQL que devuelve un sólo valor de
identificador, en vez de un Recordset (rec) que hay que procesar. Útil para utilizar el
identificador devuelto directamente. Devuelve el valor 0 si no encuentra nada.

buscaN (select) - Realiza una búsqueda SQL que devuelve una matriz de valores o
una matriz de matrices. El valor de retorno son N filas y N columnas.

cantidades (raíz[,fase][,parcial][,unos]) - calcula las cantidades de simples sede el


identificador raíz (por defecto 1, el concepto raíz), en la fase seleccionada (por defecto
la fase actualmente seleccionada en la ventana principal)

coeci - Valor del coeficiente de costes indirectos definido en la ventana Parámetros


generales

concreasino (tip, cla, cod, res, crea) - Permite crear un concepto nuevo de forma
similar al método creasino genérico para cualquier tabla, con el tipo tip, clase cla, y
código cod especificados. Se puede especificar un resumen res. Si crea=0 sólo busca
sin crear.

conresbusca (tip, cla, res) - Igual que concreasino, pero sólo busca. Devuelve el
identificador del concepto encontrado o 0 si no lo encuentra.

conrescrea (tip, cla, res) - Devuelve el ide de un concepto nuevo creado de tipo tip y
clase cla, con la descripción res.

dec[i|u|p|c|m|r|d|s] - Devuelve el valor de los decimales de (i)importes (u)


unidades (p)precios (c)cantidades (m)mediciones (r)rendimientos (d)dimensiones (s)
subtotales definidos en la ventana Parámetros generales

defecto - Asigna al objeto Cbas, como identificador por defecto el identificador del

Extensión COM: Objetos y métodos para acceso a datos / 371


concepto actual. Es útil para fichas en las que todos los métodos, propiedades, etc. se
refieren al mismo concepto, y sirve de abreviatura.

edición [0|1] - val=1 Pone el archivo en modo Edición para poder modificar la base
desde un Script. El valor por defecto es 0 (no edición). El atributo también sirve para
preguntar por el estado del archivo (si está en edición o no).

ejecuta (sql) - [XE] Ejecuta cualquier sentencia SQL (insert, update...), EXCEPTO
búsquedas select. Es el método complementario a los busca*.

exclusivo [0|1] - Análogo al atributo edición, pero para el modo Exclusivo.

exporta (arc, [modtra]) - [X] Realiza la exportación en formato estándar INX o BC3, al
archivo arc. Opcionalmente se puede filtrar con el archivo de configuración de
Modos traslada modtra.

for[i|u|p|c|m|r|d|s] (num) - Formatea la salida del valor num al número de


decimales especificado por el nombre de la función (por ejemplo, form() formatea a
los decimales de mediciones)

gralee (arc, [vin], [cod], [que]) - Busca en la base el archivo gráfico arc, y devuelve su
identificador o 0 si no lo encuentra, con las opciones de: vincularlo o no (por defecto
vin=1), o darle un código cod (sino, se utiliza el nombre de archivo).

gragraba (ide, arc, [res]) - graba en base de datos (tabla gra) el archivo gráfico arc,
relacionándolo con el concepto de identificador ide. La función devuelve 0 si tiene
éxito. Opcionalmente se puede especificar una resolución en res: 0-Diapositiva
(baja), 1-Media resolución (siempre incrustada), 2-Alta resolución (real), 3-Media o
alta, según se trate de . Por defecto res= 2.

importa (arc, [modtra], [pre]) - [XE] Realiza la importación en formato estándar del
archivo arc, de formato INX ó BC3. Sin parámetro, Opcionalmente se puede filtrar
con el archivo de configuración de Modos traslada modtra. Con pre=1, se presenta en
pantalla una traza del proceso de importación.

moneda ([nombre | código]) - Devuelve un objeto de tipo moneda, que por defecto, es
la moneda actualmente seleccionada (monactual) en la ventana principal a través
de la ventana Monedas, y sino, la moneda principal del archivo (definida en la
ventana Parámetros generales-decimales - monbase).

Si se utiliza el parámetro de cadena nombre, con las 3 letras del código internacional
que identifica la monedas (como "EUR"), o el código de la moneda, establece esta
como moneda actual.

Admite 3 métodos:

forma (valor[,es_importe]) - Mostrar el valor con el formato propio de la moneda. El


formato incluye el número de decimales para precios, excepto si se pone a
verdadero (1) el segundo parámetro es_importe, con lo que se ponen los
decimales de importes.

precio (valor[,es_importe]) - Actúa de igual forma, pero devolviendo la conversión


del valor en la moneda del objeto.

Anexo 2: JavaScript / 372


letra (valor[,es_importe]) - Igual, que precio pero devolviendo el rótulo en letra
del valor.

A través de varios atributos, podemos acceder a todos los campos de la tabla de


monedas, mediante el método moneda y los atributos: num|sim|cod|nom|fac|
decp|decc|mas que acceden respectivamente a los datos de: número, símbolo,
código, nombre, factor de multiplicación, decimales de precios, decimales de
costes, y masculino.

pregunta (ide, tabla.campo.condato | tabla.existe[1|2]) - Realiza una consulta rápida


sobre un campo o tabla, devolviendo si el identificador ide, tiene dato en el campo (
condato) o existe en la tabla especificada. Ejemplo: rcc.des.existe2 comprueba si ide
tiene más de un ascendiente en la tabla RCC. Utiliza las mismas búsquedas que la
ventana Características.

rcg_principal (coni, [rcgi]) - Devuelve el identificador de la tabla gráficos o de la tabla


de relaciones entre conceptos y gráficos (rcg) de menor posición (el primero en
orden). Admite como parámetro un concepto coni (buscando en sus gráficos), o un
identificador de relación rcgi

rotcreasino (tip, cod, res, crea) - Crea si no existe, un rótulo res, del tipo de rótulos tip
(opcionalmente con el código cod, sino, se pone un código autonumerado), en la tabla
de clasificaciones ROT. Si no existe se crea, a menos que crea=0, en cuyo caso sólo
busca, aunque no exista. La función de vuelve el identificador del rótulo creado o
encontrado.

rotresbusca (tip, res) - Busca en la tabla ROT de clasificaciones, dentro del tipo de
rótulo tip, y devuelve el identificador del rótulo res, dentro del tipo tip.

rotrescrea (tip, res) - Análogo a conrescrea, pero para crear rótulos de clasificaciones
en vez de conceptos. Devuelve el identificador del rótulo creado, con el tipo de rótulo
tip y el nombre res (el código es autonumerado).

tabla (num|cod) - Recupera un objeto de tipo tabla tab, por su número num, o por su
código cod

tipcod (tip, [cla], [ambos]) - Código o nombre de tabla virtual del tipo tip, (y
opcionalmente clase cla). Por defecto, cla=0.

tipico (tip, [cla]) - Número del icono (en el archivo \GRÁFICOS\icotip16.bmp) que
tiene asociado el tipo tip. Por defecto, cla=0.

tipnum ([tip]) - Número de tipos de la tabla interna que contiene los Tipos de la
aplicación. Si se especifica un tipo tip, devuelve el número de clases del mismo.

tipres (tip, [cla], [ambos]) - Devuelve el resumen de la tabla Tipos del tipo tip (y clase
cla, en caso de especificarse) seleccionado. Por defecto, cla=0.

tiptab (tip) - Devuelve un objeto tipo tabla de propiedades (tab), con el tipo que se le
da: tip

<nombre_tabla> - Devuelve un objeto de tipo tabla. El acceso directo al campo de una


tabla se realiza mediante la notación: <objeto_base>.<tabla>.<campo>. También hay
una notación abreviada para tablas que se relacionan de forma "N a N" como el caso

Extensión COM: Objetos y métodos para acceso a datos / 373


de identificadores de concepto (tabla CON) con identificadores del rótulos (tabla ROT)
conide <> rotide. En estos casos, la notación abreviada puede ser: <tabla>.<campo>.
<campo>.<campo>... : rot.res (doc.pag) = doc.pag.res

Métodos de tab (objeto tabla)


NOTACIÓN: dependiendo del tipo de tabla, el parámetro reg es un conjunto de
registros o Recordset, que puede ser:

nada (el valor por defecto)

un identificador ide

alguna de las siguientes: cod | tip,cla,"cod" | ide1,ide2 | ide1,ide2,ide3

Por ejemplo, la tabla con, utiliza en código de un concepto (tip,cla,"cod"), pero la tabla
rcc utiliza dos identificadores (ide1,ide2), y la tabla de rótulos o clasificaciones,
(iderot, cod) donde 'iderot' es un identificador de la tabla de clasificaciones que es
1000*ide_tipo+ide_clase, y 'cod' es una cadena de caracteres

dbdao - [XE] Da acceso a todo el interface DAO, a través de asignar tab a un


objeto de tipo DAOTabledef

busca (reg) - Devuelve el identificador del registro buscado, reg. Si en vez de un


registro se introduce un trío tipo, clase, código, se devuelve el identificador del
concepto.

crea (reg) - [E] Devuelve el identificador del registro creado, crea el registro en la
tabla con la que se utilice. Cuidado al crear valores duplicados.

creasino (reg) - [E] Devuelve el identificador del registro encontrado o creado si


no existe reg

creacopia (reg) - [E] Sólo se puede utilizar en la tabla CON. Devuelve el


identificador del registro copiado con el parámetro reg.

deftab - Para definición de tablas. Crea una tabla con el objeto Cdeftab, que
admite los métodos res, pad, cod, tab, pos, pospad, deftip, bastip, doctip, unico

defcam - Para definición de campos de tabla. Crea campos con Cdefcam, que
admite los métodos res, pad, cod, tip, tam, atr, sel

defind - Para definición de índices de tablas. Crea un índice tabla con el objeto
Cdefind, que admite los métodos cod, cam, tip

filnum - Número de filas de la tabla

camnum - Número de campos

campo[f] (num|cod, reg) - Valor del campo especificado mediante su num o cod en
el conjunto reg. Si en vez de campo se utiliza campof, la salida se formatea al
tipo del campo

<nombre_campo>[f] (reg) - El nombre de campo simplemente, también sirve para


acceder al contenido de cualquier campo. El método terminado en f formatea

Anexo 2: JavaScript / 374


campo (num|cod, reg)= - [E] Permite asignar un valor al campo especificado por
num o cod y del conjunto reg

<nombre_campo> (reg)= - [E] El nombre del campo solamente, y dado un conjunto


reg, también permite asignar un valor a un campo. Como excepción, sólo para la
tabla CAB, se admite la asignación de un valor directamente en la tabla.

elimina (ide, [conrefs]) - Elimina la referencia ide. Devuelve 0 si ha tenido éxito.


Si el parámetro conrefs=1, se eliminan las referencias de la tabla rcc, con el ide
eliminado.

traslada (bas2,ide2) - Copia en la base actual el ide2 de la base bas2. Devuelve


el identificador copiado

Métodos de rec (objeto registro)


dbdao - [XE] Da acceso a todo el interface DAO, a través de asignar el registro rec a
un objeto de tipo DAORecordset

camcod (num) - Código del campo cuyo número es num

camnum - Núm. de campos o columnas

campo (num|cod) - Devuelve el valor del campo, igual que el de tab, pero sin formato

campof (num|cod) - Igual que campo, pero con formato

camtip (num|cod) - Tipo del campo al que se accede mediante su num o su cod

filnum - Número de filas del Recodset

final - Devuelve el valor verdadero (1) cuando llega al final del conjunto (no quedan
registros en el Recordset)

siguiente - Pasa al siguiente registro en el puntero del Recordset

<nombre_campo> - El nombre simplemente, también accede al valor del campo

Métodos de Cima (objeto gráfico imagen)


con (conide, [num], [res]) - lee en el objeto, el gráfico número num (el primero o gráfico
0 si no se especifica ninguno) del concepto con identificador conide. Opcionalmente
se puede especificar la resolución res de la imagen que se carga: (0)diapositiva, (1)
media, (2)alta, (3)media o alta resolución, dependiendo de si es mapa de bits o
vectorial. Cuando la imagen es vectorial, la media resolución es formato EMF

exporta (graide, [res]) - graba en un archivo externo el gráfico graide, con las mismas
opciones de resolución res que en con

filtra (filtro) - aplica al gráfico el filtro especificado, la documentación de los filtros


aplicables según se trate de gráficos vectoriales o bitmap y los parámetros que
utiliza cada filtro, están en el informe \Colecciones
especiales\Gráficos\Ejemplos\Ejemplo de filtros gráficos (gra_ejefil.xjs)

gra (graide, [res]) - carga en el objeto imagen, el gráfico con identificador graide, de la
tabla de gráficos (no de la de relaciones entre conceptos y gráficos). Opcionalmente

Extensión COM: Objetos y métodos para acceso a datos / 375


se puede especificar la resolución res igual que en con

graba ([arc]) - copia el contenido gráfico del objeto al archivo arc. Si no es especifica
este, lo copia al portapapeles de Windows

importa (graide) - carga un archivo externo en la B.D., con el ide indicado

lee ([arc]) - lee el contenido del archivo arc al objeto; si no se especifica ninguno, se
lee del portapapeles

Métodos de Cdxi (objeto gráfico mapa vectorial)


A continuación se comentan algunos de los métodos y atributos más importantes,
pero la descripción completa de modificadores, métodos y utilización de estos objetos
están en el informe \Cabeceras y librerías generales\Librería DXI (libdxi.xjs)

capa (capide|capcod [, res]) - busca capa por su identificador o código, y devuelve su


identificador. La crea si no existe, en cuyo caso se puede especificar el resumen res

bloque (bloide|blocod [, blores]) - mismo funcionamiento que capa, pero para bloques

punlee (pun, escala [, mapide]) - lee toda la información gráfica de las capas activas
que cae dentro del recuadro delimitado por la lista de puntos pun, a la escala
indicada (en función de la escala seleccionada, se mostrarán las capas visibles a
esas escalas). Opcionalmente, si se especifica un identificador de concepto mapa

zomlee (zom [, mapide]) - igual que punlee, pero cargando el rectángulo visible al
zoom actual en la ventana de mapas. Si se especifica un mapa concreto mapide, se
trabaja con este en vez de los datos actuales.

panlee (mapas) -

refext - si recibe el valor 1, p0ne como fondo la referencia externa, con el


difuminado actual especificado en la base de datos actual

lee (arcdxi) - lee en el objeto el contenido del mapa en formato DXI

m??? - modificadores de la presentación del mapa, se corresponden con los modos y


herramientas de las ventanas Mapa y Geomapa. Se componen de 3 letras: mfon=1
indica forzar fondo en color negro, mbyn=1 fuerza modo blanco y negro, mbro=1
especifica con brocha (relleno), etc.

Métodos de Cgrf (objeto gráfico estadístico)


tipo - define la clase de gráfico: (1) gráfico de líneas, (2) columnas o barras, (3)
circular o de tarta.

categorias (array_rot)- inicializa las categorías que van a existir en el gráfico con los
valores array_rot contenidos en una matriz de valores. Estas categorías se mostrarán
en el eje horizontal en los gráficos de tipo 1 y 2, y en la leyenda en los gráficos de
tipo 3. Ejemplo: grf.categorias (["Mano obra", "Maquinaria", "Materiales",
"Subcontrata", "Otros"])

serie (nom, array_val) - define los valores para cada serie de las definidas en
categorías. Cada serie recibe el nombre nom, y los valores incluidos en la matriz
array_val.

Anexo 2: JavaScript / 376


acero - permite poner el origen de los gráficos de barra con referencia al valor cero,
de forma que si hay valores negativos salgan por encima y debajo del cero. (Sólo se
aplica a tipo=2).

colorfondo - color del fondo del gráfico (por defecto es "FFFFFF" es decir, blanco). Este
color afectará únicamente a la zona en la que se dibuja el gráfico, mientras que el
color de fondo para la leyenda, título y resto de los elementos se establece mediante
el modificador del campo en el que se muestra el gráfico.

encolor - se pondrá 1 cuando se quiere que el gráfico se muestre utilizando distintos


colores para cada serie de valores, y 0 para mostrar una escala de grises.

espacio - define el espacio libre alrededor del gráfico. Si tiene valor cero, los rótulos
de la leyenda, el título del gráfico, los nombres de las categorías y los valores del eje
'Y', quedarán pegados a los ejes del gráfico.

guiashor y guiasver - determinan si se mostrarán (1) o no (0), guías o líneas de


guiones horizontales y verticales respectivamente para facilitar la lectura del
gráfico.

leyenda - propiedad que define si se muestra (1) la leyenda, o no (0). Además de


poder establecer el valor de esta propiedad directamente, también existe como
método: leyenda (leyenda, tamaño). El primer argumento muestra (1) o no (0) la
leyenda y el argumento tamaño especifica el tamaño de la letra a utilizar en la
leyenda (puede ser uno de los tipos de letra definidos en configuración de la
impresora [0-4].

libera - inicializa el objeto gráfico estadístico poniendo en blanco todos sus datos de
categorías, serie, color, leyenda... de forma que se puede utilizar otra vez el mismo
objeto en memoria asignándole distintos datos.

rotuloG - guarda el título del gráfico.

rotuloX y rotuloY - pone los textos que se muestran en los ejes x e y


respectivamente (en gráficos de líneas y de barras). El tamaño de la letra para los
rótulos, para los nombres de las categorías y para la escala mostrada en el eje 'Y',
depende del tamaño de letra establecido por el campo donde se imprime el gráfico.

rotval - determina si aparecerán los valores de la serie en el gráfico. Al igual que la


propiedad leyenda, se puede establecer esta propiedad invocando el método rotval (
mostrar, tamaño), lo que permite determinar el tamaño de la letra.

Se puede ver un ejemplo de utilización de muchos modificadores en el informe


"Ejemplo de uso de gráficos estadísticos" de la carpeta "colecciones especiales/
ejemplos"

Métodos de Cmapi (objeto mensajes por e-mail)


readmail () - activa las funciones de la DLL MAPI, que es obligatorio que está
instalada en el sistema; si no es así, se muestra un error y no se pueden utilizar los
métodos.

date - fecha de envío del mensaje (llegada a nuestro servidor de correo).

to - nombre del destinatario del mensaje

Extensión COM: Objetos y métodos para acceso a datos / 377


subject - asunto del mensaje seleccionado

text - texto del mensaje

idmsg - identificador del mensaje dentro de la lista de mensajes recibidos

deletemail () - eliminar mensaje

sendmail () - enviar mensaje

Métodos de Chor (objeto fechas y horas)


NOTACIÓN: los parámetros de tipo intervalo pueden ser menores o mayores que
00:00:00, en cambio los de tipo hora, están restringidos entre 00:00.00 y 24:00:00
(inclusive).

Chor (h, m, s, 1) - constructor de un objeto de tipo tiehor (hora). Cada uno de los tres
valores puede ser entero o real, positivo o negativo;

hors, mins, segs - cada uno devuelve un número con las horas, minutos y segundos
de un objeto de tipo hora.

esintervalo - devuelve el valor verdadero (1) si el formato es de intervalo o cero, si


es de hora.

ponintervalo - asignándole el valor 1, se fuerza el formato del objeto tiehor a


intervalo, con el valor cero, se fuerza a formato hora.

ponhora (hora) - asignándole un valor entero hora, establece sobre el mismo objeto
tiehor la hora, minuto y segundo de hora, manteniendo el formato que tenía (hora o
intervalo). Ejemplo: si h1 es de tipo hora 00:00:00, h1.ponhora=271345 daría como
resultado 3:13:45

cadena (completo) - devuelve una cadena con la hora formateada en el formato


completo (si el parámetro completo=1) o el más breve posible (eliminando ceros por la
derecha) si completo=0. Ejemplo: h1=tiehor(2,1) y h1.cadena(1) sería 2:00:00 pero h1.
cadena sería 2.
entero -

doble -

suma (hor) -

resta -

suma2h -

resta2h -

divide2h -

multiplica2h -

Se puede ver un ejemplo de utilización de muchos modificadores en el informe


"Ejemplo de uso del objeto Chor" de la carpeta "colecciones especiales/ejemplos"

Anexo 2: JavaScript / 378


Métodos de dialogo (objeto Formularios)
dia.ayuda (link) - Establece para el diálogo un enlace con un tema de ayuda de los
existentes en el archivo de ayuda de la aplicación. Este método añadirá en la barra
de botones del diálogo el botón Ayuda, que al ser pulsado por el usuario abrirá el
archivo de ayuda (si no lo está) y se posicionará en el vínculo que recibe como
argumento. Por ejemplo: dia.ayuda ("Sigrid/refbas.htm#dialogo")

dia.campo (id[, texto][, ancho]) - Añade un campo de edición al diálogo, el primer


argumento es un número que identifica al campo, y se utilizará para recuperar los
datos introducidos en el campo con el método valor. El segundo argumento, opcional,
es una cadena de texto que se utilizará como etiqueta descriptiva del campo, esta
etiqueta se dibujará en pantalla a la derecha del campo. El último argumento,
también opcional, es un número entero para indicar el ancho relativo del campo.

El ancho relativo del campo hay que especificarlo teniendo en cuenta que el método
campo siempre asigna un 10 al ancho de la etiqueta. Si se especifica 10 para el
tercer parámetro, el ancho del campo de edición corresponderá a la mitad del ancho
de la ventana del formulario, asignando la otra mitad a la etiqueta. Si el argumento
es 5 el ancho se repartirá como sigue 10 para la etiqueta + 5 para el campo de
edición = 15, asignando 1/3 (5/15) del ancho de la ventana al campo de edición y
2/3 (10/15) a la etiqueta.

dia.campoM (id[, texto][, ancho][, alto])- Crea un campo de edición de texto multilínea,
con una barra de desplazamiento vertical. Recibe: obligatoriamente un identificador,
opcionalmente una cadena de texto para la etiqueta del control, y opcionalmente
también un número que determina el ancho del campo (por defecto es 10), por
último, y opcionalmente, recibe el número de líneas o altura del control (por defecto
son 4).

dia.crea (tit, [id[,guarda]]) - Muestra el formulario en pantalla. Recibe como


argumentos el texto a mostrar en el título de la ventana, un nombre para identificar
la ventana y un tercer argumento que determina si se almacenarán los datos de los
controles del formulario.

Si el tercer parámetro es 1, se almacenarán en el archivo de inicio (.ini) de la


aplicación lo últimos valores especificados en los controles, utilizando el
identificador, de forma que la siguiente vez que se ejecute el dialogo, aparecerá con
estos valores. Si por el contrario se especifica un 0 los campos de edición
aparecerán a blanco y el grupo de opciones tomará el valor cero (la primera opción
será la seleccionada).

dia.grupo (["V"/"H" [,mod]] ) - Inicia/finaliza un grupo de controles, cuando no recibe


ningún argumento finalizará el último grupo de controles iniciado. Cuando el primer
argumento es V, se inicia un grupo de controles que se dispondrán verticalmente, si
es H los controles se colocarán horizontalmente. Los modificadores aplicables son:

b: borde, seguido de un número, 0 sin borde, 1 línea, 2 en relieve, 3 bajo relieve,


4 cincelado.

m: margen, seguido de 0 sin margen, o 4 para establecer un margen de 4 pixels.

dia.grupo ("N"[,mod]) - Inicia un grupo de pestañas en el diálogo. Además de los


modificadores relativos al margen y al borde pueden aplicarse los siguientes:

Extensión COM: Objetos y métodos para acceso a datos / 379


l: tipo de letra seguido de un número de 0 a 5 para indicar el tipo de letra a
utilizar de los tipos definidos en las opciones del programa.

t: tipo se pestañas: 0 para pestañas de tamaño proporcional al ancho del diálogo


y que se extienden cuando el ancho del diálogo aumenta, 1 para pestañas cuyo
ancho se adapta al tamaño de su etiqueta y no cambia al variar el ancho de la
ventana

Cada pestaña se iniciará invocando de nuevo el método grupo, que tiene que tener
como primer argumento una cadena vacía, y como segundo argumento una cadena
con cuatro elementos separados por coma como sigue: "mc1,'Primera pestaña',-1 -1",
en donde Primera pestaña se reemplazará por la etiqueta de la pestaña.

dia.opcion (id, etiquetas) - Crea una casilla de verificación o un grupo de opciones


representadas por botones de radio. Recibe dos argumentos: el primer argumento es
un número identificador del control, el segundo es una cadena de texto.

Si la cadena de texto que recibe como segundo argumento no contiene el carácter


punto y como (;), creará una casilla de verificación utilizando esta cadena de texto
como etiqueta para la casilla. El método valor aplicado a este control retornará
verdadero o falso, según que la casilla de verificación esté activada o no.

Si la cadena de texto etiquetas contiene el carácter punto y coma (;), creará un grupo
de opciones de botones de radio, tomando como etiqueta de cada botón el texto
comprendido hasta el carácter punto y coma.

La primera de las opciones corresponde al valor cero, la segunda al uno, etc. Es


decir, el método valor retornará 0, 1, 2, etc., según la opción seleccionada.

dia.opcionL (id, eti, opciones, [, ancho]) - Añade una caja combinada, el primer
argumento es un número entero identificador del control, el segundo es una
etiqueta que aparecerá a la derecha del control, el tercero es una cadena de texto
conteniendo las opciones que aparecerán en la lista separadas por punto y coma (;),
el cuarto argumento, opcional, es un entero para indicar el ancho relativo del
control, tal como se indica en el método campo. Al aplicar el método valor sobre este
control, retornará el texto de la opción seleccionada.

dia.seleccion (ide, seleccion) - Asocia a un campo de edición la posibilidad de


desplegar una lista de selección al suministrar en el una máscara de búsqueda. El
primer argumento es el identificador del control tal como se ha suministrado en el
método campo, el segundo es una cadena de texto que indica la lista de selección
que se quiere asociar, puede ser:

Un código de tipo de Concepto, seguido de un punto, y de la palabra cod, res, o


series: TIPXXX.cod|res|series

Un nombre de tabla auxiliar, seguido de cod o res: auxXXX.cod|res

dia.texto ([texto][,mod]) - Si no recibe ningún argumento incluirá una línea


separadora horizontal en el diálogo. El primer argumento es una cadena de texto a
incluir como etiqueta en el formulario . El segundo argumento, opcional, es una
cadena de texto para modificar el formato aplicable a la etiqueta. Los posibles
modificadores son:

Anexo 2: JavaScript / 380


bn: establece el borde para el texto, siendo n un número entero: 0 sin borde, 1
línea, 2 en relieve, 3 bajo relieve, 4 cincelado.

cn: color, 0 negro, de 1 a 5 serán los colores seleccionados para los tipos de letra
en las opciones del programa, 1 color de la letra pequeña, 2 mediana, etc.

en: exacto, 0 no, 1 sí. En el segundo caso el ancho del campo corresponderá al
ancho de la cadena de texto que contiene.

ln: indica el tipo de letra, siendo n un entero de 0 a 5 para indicar el tipo de


letra a utilizar de los tipos definidos en las opciones del programa: 0 pequeña, 1
mediana, 2 grande, 3 enorme, 4 programa, 5 texto. Por ejemplo: dia.texto
("Etiqueta", "l2")

mn: margen de separación entre el texto y el borde, 0 sin margen, 4 margen de


4 pixels.

jn: justificación del texto, 0 izquierda, 1 centro, 2 derecha

dia.valor (ide[, valor]) - Retorna o establece los valores de los controles del diálogo.
Cuando recibe un único argumento retorna el valor almacenado en el control cuyo
identificador recibe como argumento. Si el control es un campo de texto retornará la
cadena contenida en el control, si es una casilla de verificación retornará verdadero
o falso dependiendo de que la casilla esté activada o no, si se trata de un grupo de
opciones retorna un número indicativo de la opción seleccionada comenzando por
cero, si es una caja combinada retorna el texto de la opción seleccionada.

Si recibe un segundo argumento establecerá el control de identificador id con el


valor, permitiendo así asignar valores de defecto antes de invocar el método crea.

Extensión COM: Objetos y métodos para acceso a datos / 381


Extensión COM de JScript para datos de presupuestos
Aparte del interface de acceso a los componentes básicos y para impresión y acceso a
datos, tenemos un complemento de propiedades, objetos y métodos particulares para
acceso a datos mucho más particulares: fases de obra, ámbitos de precios...

Otros métodos, propiedades y objetos de acceso a datos


ingra: recuerde que es el objeto motor por defecto. De él parten los demás objetos y
métodos.

Métodos de ingra
coeci - Valor del coeficiente de costes indirectos definido en la ventana Parámetros
generales

calculado - Indica si el conmutador Calculado se encuentra activado

recalcula ([ide]) - Realiza la operación de recálculo, opcionalmente hacia abajo a


partir del identificador de concepto ide, sino recalcula todo el presupuesto.

moneda - Devuelve el índice de la moneda actual del archivo (monactual si hay una
seleccionada en ventana principal, y sino, monbase)

fase=fas - Asigna como fase actual para cálculos e impresión de datos, la fase
número fas

fasact ([fas]) - Obtiene la fase actual o, si se especifica, pone como actual la fase fas

fascrea (descrip) - Crea una nueva fase a continuación de la última, con la


descripción descrip.

faselimina (fas) -

fasnum - Obtiene el número total de fases del archivo

fasrecrea (fas) -

Extensión COM de JScript para datos de presupuestos / 383


ambito=amb - Asigna como ámbito actual para cálculos e impresión de datos, el
ámbito número amb

ambact ([amb]) - Obtiene el ámbito actual o, si se especifica, pone como actual el


ámbito amb

ambborra (amb, fas) -

ambcrea (descrip) - Crea un nuevo ámbito a continuación del último, con la


descripción descrip

ambelimina (amb) -

ambnum - Obtiene el número total de ámbitos del archivo

descompuestos (con, acu) - Obtiene los descompuestos del concepto con el


identificador con, pudiendo especificar en el modo acu: (0) si no se quieren
acumulados (descomposición normal), (1) acumulados y (2) acumulados recursivos.
La estructura que devuelve, contiene en una lista de matrices, con todos los
descompuestos, y cada uno los siguientes datos: [0]código del concepto, [1]
identificador de relación, [2]cód. del concepto padre, [3]tipo del concepto hijo, [4]
cantidad, [5]precio, [6]subtotal

cancalcula (par) -

cantidades ([nivel] [,fase]) - Calcula cantidades de conceptos recorriendo en


profundidad a partir del concepto niv, que por defecto es el concepto raíz (es decir, niv
=1 para todo el presupuesto) y para la fase fas (por defecto la actual en ventana
principal). Con esos cálculos crea un objeto de tipo Cdoccan que tiene funciones
para acceder a los distintos datos:

mediciones (rel, [for], [ref]) - Como la anterior, ofrece una estructura de datos con
las mediciones desglosadas correspondientes a una relación rel. La salida puede
estar formateada con for.

El contenido de cada matriz (línea de medición de una lista) son todos los datos de la
ventana mediciones: [0]Tipo de medición, [1]Comentario, [2]Nº Unidades, [3]Largo,
[4]Ancho, [5]Alto, [6]Subtotal línea y [7]Total acumulado de las líneas anteriores (muy
útil para suma_y_sigue).

texrefsincolgar () - ?

texrefcambia (ci, pl, numidel, numnuml) - ?

Métodos de Cdoccan
Todas las funciones que admiten como parámetro un identificador de concepto ide,
ofrecen el dato correspondiente a ese concepto

num -

can (ide) - Este, y todos los que reciben como parámetro un identificador, para
acceso por identificador. Cantidad en la fase

acu (ide) - Cantidad acumulada

Anexo 2: JavaScript / 384


canf (ide) - Cantidad en la fase, con formato para imprimir

acuf (ide) - Cantidad acumulada, con formato para imprimir

idei - ?

tipi - ?

cani - ?

acui - ?

Extensión COM de JScript para datos de presupuestos / 385


Extensión COM de JScript para programar informes
Objetos

Propiedades

Métodos

Modificadores de formato

Métodos, propiedades y objetos para imprimir


La parte correspondiente a interface y funciones para manejar fechas y campos de
impresión, las tiene en objetos básicos para imprimir.

Como nomenclatura para métodos, objetos, funciones, modificadores, etc.


utilizaremos el siguiente convenio de notación:

rgb - Los colores se representan en formato RGB (es decir, con componentes
red,green,blue) con la notación 12:3:100 inedo 3 valores de 0 a 255. Cuando se
pone un único valor, se suponen los 3 iguales y consiste en una gama de
grises.

Dentro de los objetos y métodos básicos del objeto ingra, encontramos el objeto
impresor, cuya definición tiene el formato:

Cimp ([archivo_cni [ ,columnas ,margen]]) - A partir de este objeto impresor,


podremos trabajar a nivel de tabla. Dándole opcionalmente un valor al parámetro
archivo_cni que hace referencia a la configuración de impresora que utilizaremos.
También podremos indicar el número de columnas con las que presentaremos
nuestro informe, como si fuesen múltiples páginas que solo hay que definir una
vez, en una misma hoja, y el margen que las separará. Este objeto se sirve de los
siguientes métodos y atributos:

Objetos
subtabla - es un objeto tiene las mismas propiedades y métodos que impresor,
siendo a su vez el objeto subtabla uno de sus miembros. Permite definir subtablas

Extensión COM de JScript para programar informes / 387


dentro de las tablas para poder diseñar informes de cualquier nivel de complejidad
en anidamiento.

Para inicializar el objeto subtabla se utiliza la siguiente sintaxis:

s = imp.subtabla ([modsc[, mods[, modc]]])

El primero de los argumentos especifica el ancho de las columnas de la subtabla y el


número de estas, pueden también especificarse otros modificadores de formato que
afectarán a las columnas de la subtabla. El segundo especifica los modificadores que
afectarán a toda la subtabla. El tercero contiene modificadores para el campo de la
tabla en el que se está definiendo la subtabla.

Por ejemplo:

var sub = imp.subtabla (". .", "b1", "m#38AD5F")

sub ("SC 1");

sub ("SC 2");

sub.linea();

mostrará dentro de la tabla donde se defina la variable "sub", un campo que se divide
en una subtabla de dos columnas iguales, con borde y un fondo de color verde.

Propiedades
col - Almacena la columna (definida en el objeto impresor), dentro del informe en la
que se mostró la última línea al invocar el método linea. Si el número de columnas
del informe es superior a 1, la propiedad tendrá inicialmente el valor 1, y se
incrementará de uno en uno al mostrar la primera línea de las sucesivas columnas
del informe.

pag - Almacena el número de página actual. Por ejemplo, para mostrar el número de
página en el informe:

imp ("Página: " + imp.pag);

x1 - Almacena el valor en milímetros del margen izquierdo establecido en la


ventana configuración de impresora

Anexo 2: JavaScript / 388


x2 - Almacena la distancia en milímetros desde el borde izquierdo de la página al
margen derecho establecido en configuración de impresora

xx - Diferencia entre x2 y x1.

y1 - Almacena la distancia en milímetros desde el borde superior de la página al


comienzo de la línea que se imprime al llamar al método linea.

y2 - Almacena la distancia en milímetros desde el borde superior de la página al


margen inferior definido en configuración de impresora

yy - Diferencia entre y2 e y1.

Métodos
campo ([dato[, modificadores]]) - Añade un campo a la lista de campos a imprimir en
una linea. Este es el método por defecto del objeto impresor, por lo que no es
necesario incluir la palabra campo para invocarlo. El argumento dato puede ser: una
cadena de texto, o un número, o una expresión que pueda evaluarse a una cadena
de texto o a un número, o un objeto subtabla. El argumento mod es una cadena de
texto conteniendo modificadores de formato del campo, estos modificadores
determinarán el aspecto que tendrá el campo. Si no recibe ningún argumento,
añadirá un campo vacío.

global (modificadores) - Establece modificadores de formato que se aplicarán a todos


los campos del informe. La cadena modificadores contendrá una combinación de
modificadores de formato.

hor ([x1][, x2]{, x} [,modificadores]) - Muestra una línea horizontal desde el punto x1 al
punto x2 expresados en milímetros desde el margen izquierdo de la página, a una
distancia y en milímetros desde el margen superior de la página. si a la cadena se
añaden más posiciones (x), la raya se traza entre todas ellas. Opcionalmente puede
recibir una cadena de modificadores. Si no recibe ningún argumento muestra una
línea horizontal ocupando el ancho de página disponible. Vea también el método ver.

linea ([modificadores [,bloquea]]) - Muestra una línea los campos definidos

Extensión COM de JScript para programar informes / 389


previamente con el método campo. El argumento modificadores es una cadena de
texto que contiene modificadores de formato aplicables a la línea (los puede ver más
adelante).

Si bloquea es distinto de cero, la línea irá unida a la siguiente, sin separarlas en el


caso de producirse un salto de página. El bloqueo se rompe cuando invocamos una
linea sin bloqueo, y entonces se imprimen todas las que quedaban pendientes
bloqueadas.

Si se ha invocado previamente el método tabla los campos se mostrarán en las


columnas definidas para la tabla. En caso contrario teniendo en cuenta el tamaño
del papel, los márgenes establecidos, y el número de columnas del informe, el
método linea divide el ancho disponible de la línea en partes iguales, asignando este
espacio a cada campo de la lista, y colocando en este espacio el dato o valor de cada
campo.

pagina () - Equivale a un salto de página, deja el resto de la página en blanco y salta


a la siguiente.

tabla ([modif_columna][, modif_tabla]) - Determinar el número total de columnas que


se quiere mostrar cada vez que se llame al método linea, y el aspecto que tendrá
cada una de ellas. El argumento modif_columna es una cadena de texto que contiene
los modificadores para las columnas de la tabla, los modificadores de cada columna
se separan con un espacio. Si el modificador de columna es un punto, tomará como
tamaño todo el restante. El argumento modif_tabla es una cadena que especifica los
modificadores aplicables a todas las columnas de la tabla o modificadores de tabla. Si
no se especifican argumentos el resultado será la eliminación de la anterior
definición de tabla.

ver ([y1][, y2]{, y} [,modificadores]) - Exactamente igual que hor, pero para líneas
verticales.

Modificadores del formato


Antes que nada, puede ver e imprimir un ejemplo de todos estos modificadores con
el informe ejemod.xjs que le puede ser de mucha utilidad para comprender estas
descripciones de funcionamiento.

Los métodos del objeto impresor reciben como último argumento una cadena de
texto, que contiene códigos que se interpretan como modificadores de la forma en
que se muestran los datos. Estos códigos se conocen como modificadores de formato.

Cuando se definen modificadores a distintos niveles (invocando los distintos


métodos del objeto impresor) que afectan al formato de un mismo atributo de un
campo, se impone el siguiente criterio de precedencia de mayor a menor:

(+ importante) campo -> línea -> columna -> tabla -> global (- importante)

an - Alineación vertical y horizontal del dato dentro del campo:

Anexo 2: JavaScript / 390


ahn - Alineación horizontal: ah0- Izquierda; ah1- Centro; ah2- Derecha.

ar - Alineación al resto de altura. Si una fila de subtabla tiene este modificador y


está dentro de una tabla que tiene mayor tamaño en altura, la fila se ajustará a la
altura de la celda que la contiene.

avn - Alineación vertical: av0- Superior; av1- Centro; av2- Inferior.

bn - Borde del campo: b0- sin borde; b1- borde continuo; b2- borde de puntos; b3- borde
de rayas.

bgn - Grosor del borde en milímetros.

bi, bd, bs, bn - Borde izquierdo, borde derecho, borde superior, borde inferior.

bh - Borde horizontal. Equivalente a bs bn.

bv - Borde vertical. Equivalente a bi bd.

b#rgb - Color del borde.

cn - Modificador de combinación de campos. Por ejemplo imp ("Cliente especial por


su volumen de facturación", "c3"), unirá el campo actual con los dos siguientes
dando formato al dato en el espacio correspondiente a los tres campos.

d - Falta

en - Margen externo del campo en milímetros.

ein, edn, esn, enn - Margen externo en milímetros: izquierdo, derecho, superior,
inferior.

ehn - Margen externo horizontal en milímetros. Equivalente a "ms mn".

evn - Margen externo vertical en milímetros. Equivalente a "mi md".

e#rgb - Color de relleno del margen externo.

Extensión COM de JScript para programar informes / 391


ln - Especifica un tipo de letra de los definidos en la ventana Configuración de
Impresora, n será un número del 0 al 4 referenciando los cinco tipos de letra
definidos.

ln - Letra Negrita.

lc - Letra Cursiva.

ls - Letra Subrayada.

lt - Letra Tachada.

lf - Letra de paso fijo, cada carácter ocupa el mismo espacio horizontal, por ejemplo
la letra Courier. (1) es el valor por defecto para estos últimos: activa el modificador.
También se puede desactivar (0), si está activado por otro ámbito de menos
importancia

lo - Letra opaca: si se define para el interior del campo algún color y no se


especifica lo, las letras aparecerán sobre dicho color de fondo sin sobreescribirlo, de
forma que entre una letra y otra aparecerá el color del interior del campo. Sin
embargo, el modificador hace que la letra sobreescriba sobre el color del fondo.

lan - Angulo de giro del texto. Por ejemplo la45, texto girado 45º.

lhn - Tamaño horizontal de la letra en milímetros.

lvn - Tamaño vertical de la letra en puntos.

l#rgb - Color del texto. Por ejemplo l#CE40A7 para que la letra sea fucsia.

lrcar - Rellena el espacio libre del campo con el carácter ASCII car. Por ejemplo: imp
("campo 1", "lr."), mostrará en el campo correspondiente: "campo 1..........", rellenando
con puntos (.) el espacio disponible a la derecha.

ljn - Texto justificado: lj0- no justifica; lj1- justificado; lj2- justificado incluso en la
última línea.

lgn - Guionado del texto: lg0- no guionado; lg1- guionado normal; lg2- si el texto no
cabe en el espacio horizontal del campo, lo recorta mostrando tres puntos (...).

Anexo 2: JavaScript / 392


mn - Margen interno del campo en milímetros.

min, mdn, msn, mnn - Margen interno en milímetros: izquierdo, derecho, superior,
inferior.

mhn - Margen interno horizontal en milímetros. Equivalente a "ms mn".

mvn - Margen interno vertical en milímetros. Equivalente a "mi md".

m#rgb - Color de relleno del margen interno.

rin, rdn, rsn, rnn - Estilo de la raya de borde de párrafo: (0) no, (1) sólida, (2) puntos,
(3) rayas

rhn - Raya horizontal en milímetros. Equivalente a "rs rn".

rvn - Raya vertical en milímetros. Equivalente a "ri rd".

rgn - Grueso de la raya en milímetros

m#rgb - Color de raya de borde.

r [:<columnas_izq>][:columnas_der>] - Sin ningún valor, significa, que con los valores


por defecto, imprime los 4 bordes, con el estilo 1. Opcionalmente se pueden
especificar el número de campos por la izquierda (campos_izq) y/o por la derecha (
campos_der) de la línea, que se desea que NO se recuadren.

rp - Falta

vn - Determinan el tamaño vertical en mm. Por ejemplo, imp.linea ("v20") mostrará


los campos de la línea con una altura de 20 mm. Recuerde que la anchura de
campos no se puede forzar y viene dada por el ancho de campos definidos en tablas.
Por ejemplo, imp.tabla ("75 40 30") define una tabla de tres columnas de 75, 40 y 30
mm de ancho.

xn, yn - Modificadores de posición que determinan una posición absoluta en mm,


independiente del margen establecido. Por ejemplo imp.linea ("x50 y75"), mostrará
los datos en el punto que se encuentra a 50 mm hacia la derecha desde el borde
izquierdo de la página y 75 mm hacia abajo desde el borde superior,
independientemente del margen establecido en la configuración de la página y de la
posición actual en la que se esté imprimiendo en esa página.

Extensión COM de JScript para programar informes / 393


Extensión COM: Ejemplos
Esta extensión de JavaScript suministra objetos, métodos y propiedades, para facilitar el
acceso a los datos de la base en informes o procedimientos especiales no incluidos en la
aplicación mediante la creación de programas .xjs

En el tema Extensión COM: objetos y métodos para acceso a datos se detallan los
métodos y propiedades disponibles.

Las extensiones básicas son suministradas a través del objeto que representa la
aplicación, sus métodos y propiedades están disponibles para los programas .xjs sin
tener que crear o referenciar dicho objeto. Permiten mostrar diálogos en pantalla,
recuperar la fecha del sistema, dar formato a fechas y números, ejecutar otras
aplicaciones, incluir en el programa actual otros programas .xjs, abrir un diálogo para
depuración del programa, etc.

Las siguientes sentencias son una muestra de la funcionalidad suministrada por las
extensiones básicas, puede señalar el texto arrastrando con el cursor y pegarlo en un
programa en blanco de prueba, dentro de la ventana informes y procedimientos:

// Pruebas extensiones básicas

// Diálogo de aviso

diaavisa ("Pruebas", "pruebas extensiones básicas, Acepte para continuar");

// Diálogo de edición

var txt = diaedita ("Pruebas", "Teclee el título a mostrar en el archivo y pulse


Acepta o pulse Cancela para interrumpir las pruebas");

if (txt == null)

salir(); // finaliza la ejecución del programa

Extensión COM: Ejemplos / 395


writeline (txt);

writeline ("Hoy es " + fecdianombre (hoy) + " " + fecdia (hoy) + " de " + fecha (hoy,
"mmmm") + " de " + fecano (hoy));

writeline ("Este es el archivo presenta.txt que se almacenará en el directorio: " +


temporal());

writeline ("El número 123456.678 redondeado por el método red con 2 decimales
resulta: " + red (123456.678,2));

writeline ("El número 123456.678 formateado por el método format con 2


decimales resulta: " + formato (123456.678, 2));

writeline ("El número 123456.678 es interpretado por el método letra como " +
letra (123456.678));

Pulse el botón Preliminar, y al finalizar la ejecución del programa se abrirá el Bloc de


Notas de Windows, con el archivo presenta.txt abierto, cuyo contenido será el siguiente:

PRUEBAS DE EXTENSIONES BÁSICAS

Hoy es Sábado 1 de Septiembre de 2001

Este es el archivo presenta.txt que se almacenará en el directorio: C:\Program


Files\App\Temporal

El número 123456.678 redondeado por el método red con 2 decimales resulta:


123456.68

El número 123456.678 formateado por el método format con 2 decimales resulta:


123.456,68

El número 123456.678 es interpretado por el método letra como CIENTO


VEINTITRÉS MIL CUATROCIENTAS CINCUENTA Y SEIS CON SEISCIENTAS
SETENTA Y OCHO

Anexo 2: JavaScript / 396


Preguntas frecuentes sobre programación JScript
Por la forma en que se ha implementado la extensión COM del programa, y las
peculiaridades del propio lenguaje, al programar informes o herramientas, nos podemos
encontrar con varios errores comunes. Además se señalan algunos trucos.

En una función o bucle imprimo líneas, y una o varias de las últimas no aparecen
en la página ¿porque?

Al utilizar el modificador de línea que bloquea la impresión de líneas para que no se


queden huérfanas, la impresión queda pendiente de terminar de agrupar las líneas
que no se pueden separar, y luego se imprimen todas. Puede suceder que esa
impresión queda pendiente sin un último imp.linea NO bloqueado, y entonces las
que había acumuladas no se muestran.

Al imprimir un informe no he definido ningún objeto tabla, y aún así, aparecen los
datos en 3 columnas ¿porqué?

Porque al mandar al objeto impresor, el primer método linea, si no se tiene definida


una tabla, se crea una de defecto, con el formato de campos y columnas que haya en
esa primera línea.

P reguntas frecuentes sobre programación JScript / 397


Conexión ingra.xjs para automatizar la aplicación
El programa ingra_xjs.exe que acompaña a la aplicación en el directorio \UTIL, permite
ejecutar código JavaScript totalmente programable, para automatizar (por ejemplo desde
otra aplicación) es uso de esta. Programando en JavaScript podemos (con las ventanas
de la aplicación visibles o no), arrancar el programa, abrir ventanas, mostrar pestañas y
datos, poner en edición y realizar operaciones contra una o varias B.D.

él incluso si no está en modo edición (aunque para ello, naturalmente el usuario con el
que se abre la base de datos tiene que tener permiso para ejecutar código JavaScript y
editar la base).

La ejecución desde un programa externo, o un acceso directo, o cualquier otra forma de


ejecutar esta aplicación es pasándole unos parámetros de la forma:

ingra_xjs.exe <nombre aplicación> <archivo de Script> <función a ejecutar>


[<parámetro/s de la función>]

Con el nombre del ejecutable arrancamos el programa de conexión

<nombre aplicación> es el nombre del ejecutable de la aplicación que vamos


a utilizar con la automatización (decodata, menfis, ingrid, tecno_sw, etc...)

<archivo de Script> es el nombre de uno de los programas de JavaScript del


directorio \informes del programa, sin extensión poner la extensión .xjs

<función a ejecutar> es el nombre de la función que está en el archivo .xjs

{<parámetros de la función>} puede ser una serie de varios parámetros


separados por espacios en blanco (si la función no recibe parámetros, no hay
que especificar nada). Los parámetros deben estar en el formato en que
JavaScript va a entender los datos, es decir, que si tienen espacios en
blanco, deben ir entre dobles comillas "nombre 1"; si tiene caracteres de
control como un camino en disco, deben llevan la barra inclinada doble "C:\
\dir programas\\datos", etc.

Conexión ingra.xjs para automatizar la aplicación / 399


El programa se puede utilizar copiándolo en cualquier directorio.

Al ejecutarlo, busca si la aplicación con la que se comunica está arrancada. Si no lo


está la arranca con los datos del registro de Windows y le manda un mensaje con los
parámetros explicados más arriba.

CON ESTE MECANISMO, SE SOPORTA CUALQUIER PROCESO DE AUTOMATIZACIÓN DE


LA APLICACIÓN INGRA, DESDE OTRA.

Ejemplo:

Si en el archivo libreria.xjs de la aplicación programa tenemos definida una función


cad_abre con la definición:

function cad_abre (cad)

{ ... }

y dentro de la función se utiliza la cadena de caracteres cad para dar de alta un


concepto y ponerle como resumen la cadena, esta operación se realizará ejecutando
la utilidad con los parámetros:

ingra_xjs.exe programa libreria cad_abre "Concepto 1"

Ejemplo de ejecución mediante W SH (W indows Scripting Host):

Para hacer una prueba de conexión, con la aplicación decodata, basta con ejecutar el
siguiente código en un archivo con extensión .JS:

1: var a= "ingra_xjs.exe decodata decodata_lib cad_abre c:\\cd\\cddecodata\\aca\


\deco\\deco\\work\\prudec.exp";

2: var wss = new ActiveXObject ("WScript.Shell");

3: wss.Run (a, 0, false); // 1:muestra en ventana en el estado original, true:detiene


la ejecución del script hasta que termina el comando

Anexo 2: JavaScript / 400


Introducción al FIEBDC
Definición del formato de intercambio estándar de bases de datos
de la construcción FIEBDC

FIE-BDC es una Asociación constituida para definir y supervisar el Formato de


Intercambio Estándar de Bases de Datos para la Construcción.

Se constituye en Julio de 1996 por diecisiete empresas y entidades desarrolladoras


de Programas de Presupuestos y de Bases de Datos de la Construcción, conscientes
de la importancia de poder intercambiar información entre todos ellos.

El formato FIE-BDC establece un protocolo que permite al usuario final intercambiar


cómoda y libremente información entre diferentes Programas de Presupuestos y
Bases de Datos de la Construcción que lo cumplen, existentes en el mercado.

Formar parte de la Asociación da derecho a usar el logotipo registrado FIE-BDC y a


participar en el desarrollo de posteriores versiones del formato, y obliga a cumplir sus
especificaciones en todos los productos susceptibles de hacerlo.

Actualmente la Asociación agrupa a casi la totalidad de la oferta de Programas y


Bases de Datos de Precios y Especificaciones de la Construcción.

Los usuarios finales confiarán más en los productos acreditados con el logotipo FIE-
BDC por tener mayor seguridad a la hora de utilizar todas las posibilidades de
intercambio de datos que se ofrecen en los productos existentes en el mercado.

Introducción al FIEBDC / 401


Información adicional o solicitudes de adhesión pueden ser remitidas a:
Asociación FIE-BDC

Velázquez, 124, 4º

28006 Madrid

Tel.: 91 561 94 23 ó 91 604 11 58

Fax: 91 604 11 60

La presente especificación para intercambio de archivos con información de


presupuestos y bases de datos de la construcción, fue acordado en Mayo de 1.992, y
con fecha de Diciembre 1.994, ha sido ampliado, para mantenerse vigente, al menos
durante el año 1.995, lo que queda suscrito por:

Organismos que redactan bases de datos para la construcción:


COMISIÓN DE COORDINACIÓN DE LA BASE DE DATOS DE LA CONSTRUCCIÓN

DE LA COMUNIDAD DE MADRID.

INSTITUTO VALENCIANO DE LA EDIFICACIÓN.

BANCO DE DATOS DE LA CONSTRUCCIÓN DE LA DIPUTACIÓN GENERAL DE

ARAGÓN.

GABINETE TÉCNICO DE PUBLICACIONES DEL C.O.A.A.T. DE GUADALAJARA.

ATAYO.

EDETCO.

FUNDACIÓN PARA LA CODIFICACIÓN Y BANCO DE PRECIOS DE LA

CONSTRUCCIÓN DE SEVILLA.

INSTITUTO DE TECNOLOGÍA DE LA CONSTRUCCIÓN DE CATALUÑA.

Empresas desarrolladoras de soportes lógicos informáticos para la elaboración

de presupuestos

AM2.

ARKTEC.

CCSOFT. APPLE COMPUTER.

EPROS.

FHECOR.

MICROGESA.

PROFESSIONAL SOFTWARE.

SOFT.

TOOL.

VECTOR-3.

Redactando la siguiente definición, que ponen a disposición de usuarios y empresas,

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 402


con la única condición de que cualquier implementación informática del presente
formato debe recoger tanto la entrada como la salida de datos.

Este formato pretende abarcar toda la información contenida en las actuales bases de
datos de la construcción. No todos los desarrolladores de bases de datos necesitarán
utilizar todas las posibilidades del formato; así como tampoco todos los programas de
mediciones y presupuestos harán uso de toda la información suministrada.

Se prevé además, dentro del propio formato, la posibilidad de ampliación;


manteniendo en lo posible la compatibilidad entre versiones en el caso de tratar
nuevos contenidos que se prevean en un futuro.

Introducción al FIEBDC / 403


Observaciones para editores de Bases de Datos
Formato de intercambio estándar
Hay una serie tanto de observaciones generales de funcionamientos de Menfis, como
unos consejos, que todos los desarrolladores de Bases de Precios de la Construcción
deben observar para que el resultado sea una Base estándar y chequeada, de una
forma por lo menos genérica.

Observaciones antes de hacer la producción:

Las máscaras de la ventana Parámetros generales, deben ser exactamente las que
corresponden a la codificación de la Base de Datos, por varios motivos:

Las cuatro primeras máscaras identifican los iconos que se van a asociar en el
campo info. Para que no haya inconsistencias entre distintas bases de datos, deben
ser las correctas y tenerse en cuenta que la máscara de Auxiliares no es estándar
FIEBDC-3.

IM PORTANTE: La máscara de entidades hay que tenerla en cuenta, ya que en el


formato de intercambio estándar es concepto de tipo especial. Asignarla mal puede
implicar perder datos en la exportación, o guardar como datos de entidades conceptos
que no lo son.

En los modos de traslado para Exportación, ventana Modos traslada, debe examinarse
que todas las opciones seleccionadas coinciden con la información que queremos
exportar, aunque por defecto se seleccionan todas las habituales.

Consejos de chequeo:

Antes del chequeo definitivo se aconseja:

1. Buscar conceptos sin padre (en general sólo deberían aparecer dos: el raíz (.) y
la propia búsqueda (..) aunque en algunos casos la base puede estar
organizada mediante carpetas de Clase búsqueda y tener conceptos
descolgados). Se puede realizar la búsqueda en la ventana Búsqueda general,
en la que viene predefinida esa búsqueda, ya que es bastante habitual.

Observaciones para editores de Bases de Datos / 405


2. Buscar conceptos que no sean capítulos, sin precios (posiblemente un olvido).
Para ello puede seleccionar en la misma ventana de búsqueda: Condiciones
de búsqueda: seleccione con.pre , en la lista desplegable el valor igual '=' y en
el campo a continuación, un cero '0'.

3. Conceptos con el resumen en blanco. Seleccione Condiciones de búsqueda:


con.res , y en la lista desplegable el valor igual '='. Verá que la cláusula de
búsqueda en el panel Comando de búsqueda queda:

select con.ide from con

where con.res=""

order by cod

Si deseamos saber el total de páginas real, para imprimir el libro de la base de datos,
poner en el campo Primera página a imprimir de la ventana informes y
procedimientos, un número bastante mayor que las páginas posibles, por ejemplo
50000. Después de terminado el informe, se nos muestra un diálogo con el resultado.

Sistema de descomposición paramétrica. Notas sobre errores y


restricciones
No se admiten matrices de 5 o más dimensiones.

No se deben asignar directamente variables o valores alfanuméricos a

variables de tipo numérico.

Los nombres de funciones deben ir en mayúsculas (tal como se indica más

arriba).

No se pueden utilizar valores alfanuméricos en las expresiones de rendimiento

de la descomposición paramétrica.

No se deben escribir separadores representando campos vacíos (poner varios

caracteres \\\\\ seguidos).

Además, es importante recordar en cuanto a paramétricos estándar y paramétricos


en lenguaje JavaScript, que tanto las matrices (arrays) como los índices de valores de
los parámetros, tienen distinta base en uno y otro lenguaje: En los paramétricos
estándar los índices son en base 1 y en JavaScript son en base 0. Esto quiere decir
que los valores a,b,c de un parámetro, serán 0,1,2 en JavaScript y 1,2,3 en los
estándar.

Se deben evitar, por tanto, las construcciones problemáticas que utilizan en


comparaciones o asignaciones directamente los valores de los parámetros.

Una peculiaridad de funcionamiento de las descripciones en Menfis, es que cuando

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 406


se define un concepto de Tipo Medio auxiliar en la descomposición de un
paramétrico, debido a que la especificación FIE no establece un criterio rígido, una
línea de rendimiento como:

PRPP16b : %T(%A)*1.5 # masilla homogénea

% : 1

se puede interpretar como 1 por ciento ó medición 1 (la unidad), es decir 100 por
ciento.

Para evitar ambigüedades, el criterio de Menfis SIEMPRE es: Si el código es sólo


porcentaje '%' (no '<máscara>%') y el valor es menor o IGUAL que 1, se divide por
cien, porque se considera porcentaje (sino se considera cantidad en tanto por uno).

Características NO ESTÁNDAR de Menfis


Registros no estándar
Hasta las versión Menfis 5, se utilizaban las siguientes claves en archivos .BC3,
además de todos los registros definidos en FIEBDC-3/98 (como información no
estándar, que debe poder exportar para no perder información, pero que los
programas que leen FIEBDC-3/95 estándar no pueden recuperar).

A partir de la versión 6, la exportación completa de datos estándar y particulares de


Menfis se hace en formato INX, y dejan de utilizarse los siguientes registros No
estándar:

~?CNT | CÓDIGO_CONTRATO | ENTIDAD \ CIF \ DIRECCIÓN \ REFERENCIA

\ BENEFICIO (% en trabajos por administración)

\ GARANTÍA (% de retención en garantía en cada certificación)

\ IVA (%) \ FECHA_ADJUDICACIÓN \ FECHA_OFERTA \|

~?CNTCOE | CÓDIGO_CONTRATO | Nº_FÓRMULA | FECHA

| LÍMITE_SUPERIOR | LÍMITE_INFERIOR | LÍMITE_TIPO

| A | AH | AE | AC | AS | ACR | AM | AL | ACU | AAL | AD | AG |

~?CNTMAE1 | CÓDIGO_DETALLE | CÓDIGO_ACTIVIDAD | FECHA_INI |


FECHA_FIN |

~?CNTMAE2 | CÓDIGO_ACTIVIDAD | CÓDIGO_PARTIDA | POSICIÓN | PRECIO


| CUBICACIÓN |

~?K | (parámetros generales ampliados)

~?C | CÓDIGO \ REV \ PRV \ | (concepto)

~?D | PADRE \ HIJO \ POSICIÓN \ PRE \ INI \ FIN \ DUR \ FCT \ FNL \ |
(descomposición)

Observaciones para editores de Bases de Datos / 407


Número de parámetros admitido.
Se ha ampliado PARA MENFIS, el número de parámetros a 8 aunque estos NO SON
ESTÁNDAR:

%F %G %H %I

Parámetros seleccionados del concepto, ampliando estas y las otras cuatro, con los
valores a-z, A-Z, y 0-9, sin la ñ ni la Ñ (equivalente a 1-62).

%S %T %U %V

Parámetros seleccionados de la obra, definidos en la ventana paramétrico general,


ampliando estas y las otras cuatro, con los valores a-z, A-Z, y 0-9, sin la ñ ni la Ñ
(equivalente a 1-62).

$F $G $H $I y $S $T $U $V

Los textos correspondientes a los nuevos parámetros.

IM PORTANTE : Para ver los cambios más importantes entre la última especificación
FIE y la anterior, consulte el tema de novedades.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 408


Especificación FIEBDC-3/2007
Especificación completa

INDICE:
0. ESPECIFICACIÓN del Formato.

1. ~V. Registro tipo Propiedad y VERSION.

2. ~K. Registro tipo Coeficientes.

3. ~C. Registro tipo Concepto.

4. ~D. Registro tipo Descomposición.

5. ~Y. Registro tipo Añadir Descomposición.

6. ~T. Registro tipo Texto.

7. ~P. Registro tipo Descripción Paramétrica.

8. ~L, ~Q, ~J. Registro tipo Pliegos.

9. ~W. Registro tipo Ámbito Geográfico.

10. ~G. Registro tipo INFORMACION Gráfica.

11. ~E. Registro tipo Entidad.

12. ~O. Registro tipo Relación Comercial.

13. ~X. Registro tipo INFORMACION Técnica.

14. ~M. Registro tipo Mediciones.

15. ~N. Registro tipo Añadir Mediciones.

16. ~A. Registro tipo Claves.

17. ~B. Registro tipo Cambio de CÓDIGO.

Especificación FIEBDC-3/2007 / 409


18. ~F. Registro tipo Documento Adjunto.

19. Formato FIEBDC-3. Resumen.

20. Anexo 1. Cambios respecto a versiones anteriores: 3/2004, 3/2002, 3/98 y 3/95.

21. Anexo 2. Descripción Paramétrica: Formato ESTÁNDAR.

22. Anexo 3. Descripción Paramétrica: API ESTÁNDAR para descripciones

paramétricas compiladas en DLL.


23. Anexo 4. Clasificación en tipos de los Conceptos.

24. Anexo 5. Ámbitos Territoriales.

25. Anexo 6. Divisas.

26. Anexo 7. Unidades de Medida.

27. Anexo 8. Definición de diferentes tipos de presupuestos, según criterios de la

ARBDC.

Definición del formato de intercambio estándar de bases de datos


de construcción FIEBDC-3/2007
(entrada en vigor a partir del 01/07/2008)

PRESENTACIÓN

La siguiente DEFINICIÓN del Formato de Intercambio ESTÁNDAR de Bases de Datos


de CONSTRUCCIÓN, recoge las especificaciones aprobadas hasta el Acta 15 de la CTP
inclusive (celebrada el 25 de abril de 2007) y ratificadas por la JD y ASAMBLEA de la
asociación FIEBDC.

Entrada en vigor el día 1 de julio de 2008, como VERSIÓN 3/2007.

Para facilitar su lectura, aparece en el lado derecho del texto una línea vertical en
aquellos párrafos nuevos o modificados respecto a la especificación FIEBDC-3/2004.

Este documento se pone a disposición de usuarios y empresas, con la única condición


de que cualquier implementación informática del presente formato debe recoger
tanto la entrada como la salida de datos.

Este formato pretende abarcar toda la INFORMACION contenida en las actuales bases
de datos de CONSTRUCCIÓN. No todos los desarrolladores de bases de datos
necesitarán utilizar todas las posibilidades del formato; así como tampoco todos los
programas de mediciones y presupuestos harán uso de toda la INFORMACION
suministrada.

Se prevé además, dentro del propio formato, la posibilidad de ampliación;


manteniendo en lo posible la compatibilidad entre versiones en el caso de tratar
nuevos contenidos que se prevean en un futuro.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 410


Formato FIEBDC-3. Especificación
Toda la INFORMACION necesaria para reconstruir completamente una base de datos
u obra en soportes físico y lógico distintos a aquellos en los cuales se produjo la
INFORMACION es el objetivo del formato FIEBDC, Formato de Intercambio ESTÁNDAR
de Bases de Datos de CONSTRUCCIÓN.

La INFORMACION de una base de datos, obra o certificación se dispondrá en


cualquier número de archivos en formato FIEBDC, con la extensión ".BC3", teniendo
en cuenta que estos archivos ordenados alfabéticamente contengan la
INFORMACION en el orden deseado.

La única limitación de tamaño de cada archivo será la máxima que permita el


soporte físico utilizado para su transporte. Si se utiliza algún tipo de compresor de
archivos, se deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.

El juego de caracteres a emplear en los campos CÓDIGO será el definido por MS-DOS
6.0, incluyendo A-Z, a-z, 0-9, ñ, Ñ,< . > (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), <
%> (ASCII-37), < & > (ASCII-38), < _ > (ASCII-95). Excluyendo cualquier otro carácter
como espacio, tabulador, etc.

El fin de línea será el ESTÁNDAR de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin
de archivo se marcará según el mismo ESTÁNDAR (ASCII-26). El único carácter de
control adicional que se permitirá será el tabulador (ASCII-9).

Cada archivo estará compuesto de registros, zonas de texto entre el carácter de


principio de registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la división de
archivos se deberá realizar al comienzo de un registro (carácter < ~ >).

Cada registro estará compuesto de campos separados por caracteres < | > (ASCII-
124). Todo campo con INFORMACION tendrá que finalizar con el separador de campos
y el registro deberá contener todos los separadores de campos anteriores, aunque no
contengan INFORMACION. No es necesario disponer de finalizadores de los campos
posteriores al último con INFORMACION.

Cada campo estará compuesto de subcampos separados por caracteres < \ > (ASCII-
92). El separador final, entre el último dato de un campo y el fin de campo es opcional.

El primer campo de cada registro es la cabecera de registro, una letra mayúscula que
identifica el tipo de registro.

Se ignorará cualquier INFORMACION entre el último separador de campos de un


registro (carácter < | >) o el comienzo del archivo y el comienzo del siguiente registro
(carácter < ~>).

Se ignorarán los caracteres blancos (32), tabuladores (9) y de fin de línea (13 y 10),
delante de los separadores < ~ >, < | > y < \ >.

No se podrán actualizar parcialmente campos de segundo orden (subcampos). Deberá


actualizarse la INFORMACION completa de un campo en cualquiera de los registros

La disposición de registros dentro de un archivo es completamente libre, pero se

Especificación FIEBDC-3/2007 / 411


garantizará la lectura secuencial de los mismos para evitar ambigüedades en las
sustituciones de INFORMACION.

Los campos vacíos se considerarán SIN INFORMACION, no con INFORMACION nula,


esto permite producir archivos de actualización que contengan únicamente la
INFORMACION en alguno de sus campos y, por supuesto, el CÓDIGO de referencia.

Para anular un campo numérico deberá aparecer explícitamente el valor 0 (cero).

Para anular un campo alfanumérico deberá aparecer explícitamente el RÓTULO NUL.

CONVENIOS DE NOTACIÓN

[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

<a> Indica una o más ocurrencias de "a"

(<DD>c) Tamaño máximo en número de caracteres del campo

Todos los valores numéricos irán sin separadores de miles y con el carácter punto '.'
entre la parte entera y la decimal.

Registro tipo propiedad y versión


Este registro se utiliza para documentar la procedencia y el formato de los archivos y,
cuando exista, se dispondrá al comienzo del primer archivo.

~V | [ PROPIEDAD_ARCHIVO ] | VERSION_FORMATO [ \ DDMMAAAA ] |


[ PROGRAMA_EMISION ] | [ CABECERA ] \ { RÓTULO_IDENTIFICACION \ } |
[ JUEGO_CARACTERES ] | [ COMENTARIO ] |[ TIPO INFORMACIÓN ] | [ NÚMERO
CERTIFICACIÓN ] | [ FECHA CERTIFICACIÓN ] |

PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra, fecha, …

VERSION_FORMATO: VERSION del formato del archivo, la actual es FIEBDC-3/2007

DDMMAAAA: DD representa el día con dos dígitos, MM el mes y AAAA el año. Si la


fecha tiene 6 ó menos dígitos, el año se representará con dos dígitos (AA),
interpretándose con el criterio “80/20”. Esto es, cualquier año que sea igual o
superior a 80 corresponderá al siglo XX y cualquier año que sea menor de 80
corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos representa mes y año
únicamente (MMAA), si tiene menos de tres, solo el año (AA). Si se identifica la fecha
con un número impar de dígitos, se completará con el carácter cero por la izquierda.
Para representar una fecha sin un día o mes específico, se utilizará un doble cero en
cada caso.

Ejemplos:
12062000 12 de junio de 2000
120699 12 de junio de 1999
00061281 junio de 1281
061281 6 de diciembre de 1981
401 abril de 2001

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 412


PROGRAMA_EMISION: Programa y/o empresa que genera los ficheros en formato
BC3.

CABECERA: Título general de los ROTULOS_IDENTIFICACION.

RÓTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en


el campo PRECIO del registro ~C, y los conjuntos de campos de números de decimales
del registro ~K, que tal como se indica en su ESPECIFICACIÓN, puede representar
distintas épocas, ámbitos geográficos, etc., estableciéndose una relación biunívoca
entre ambos. Véanse los anexos 5 (Ámbitos territoriales) y 6 (Divisas).

En el caso de que en el registro ~V existan más campos RÓTULO_IDENTIFICACION


que campos PRECIO en el registro ~C o que conjuntos de campos de decimales en el
registro ~K, se entenderá que el PRECIO y los conjuntos de campos de decimales de
dicho resto serán iguales al último definido.

JUEGO_CARACTERES: Asigna si el juego de caracteres a emplear es el definido para


D.O.S., cuyos identificadores serán 850 ó 437, o es el definido para Windows, cuyo
identificador será ANSI. En caso de que dicho campo esté vacío se interpretará, por
omisión, que el juego de caracteres a utilizar será el 850 por compatibilidad con
versiones anteriores.

COMENTARIO: Contenido del archivo (base, obra...).

TIPO INFORMACIÓN: Índice del tipo de información a intercambiar. Se definen los


siguientes tipos:
1 Base de datos.

2 Presupuesto.

3 Certificación (a origen).

4 Actualización de base de datos.

NÚMERO CERTIFICACIÓN: Valor numérico indicando el orden de la certificación (1,


2, 3,...) Solo tiene sentido cuando el tipo de información es Certificación.

FECHA CERTIFICACIÓN: Fecha de la certificación indicada en el campo número


certificación. Solo tiene sentido cuando el tipo de información es Certificación. La
fecha se definirá con el mismo formato que el campo DDMMAAAA de este registro.

Registro tipo coeficientes


Indica el número de decimales en cada campo numérico. Cuando el campo numérico
aparece con signo negativo, indica número máximo de decimales. En caso contrario
indica número exacto de decimales.

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \
IVA | { DRC \ DC \ \ DFS \ DRS \ \ DUO \ DI \ DES \ DN \ DD \ DS \DSP\
DEC \DIVISA \ } | [ n ] |

Este registro incluye el campo 1 por compatibilidad con versiones anteriores del
formato, aunque los programas deben leer el campo 3 por ser más completo y en su
defecto el campo 1.

Especificación FIEBDC-3/2007 / 413


Conceptos previos
Unidad de obra: Cualquier elemento simple o elemento compuesto, con o sin costes
indirectos, que se utiliza en un presupuesto.

Elemento compuesto: Todo elemento constructivo que contiene una


descomposición y que no es ni raíz ni capitulo.

Elemento simple: Todo elemento constructivo que no contiene una descomposición


y que no es ni raíz ni capitulo.

Definiciones
DN: Decimales del campo número de partes iguales de la hoja de mediciones. Por

defecto 2 decimales.

DD: Decimales de dimensiones de las tres magnitudes de la hoja de mediciones.

Por defecto 2 decimales.

DS: Decimales de la línea de subtotal o total de mediciones. Por defecto 2

decimales.

DR: Decimales de rendimiento y factor en una descomposición. Por defecto 3

decimales.

DI: Decimales del importe resultante de multiplicar rendimiento x precio del

concepto. Por defecto 2 decimales

DP: Decimales del importe resultante del sumatorio de los costes directos del

concepto. Por defecto 2 decimales

DC: Decimales del importe total del concepto. (CD+CI). Por defecto 2 decimales

DM : Decimales del importe resultante de multiplicar la medición total del

concepto por su precio. Por defecto 2 decimales

DIVISA: Es la divisa expresada en el mismo modo que las abreviaturas

utilizadas por el BCE (Banco Central Europeo), que en su caso deberán coincidir con

las del registro ~V. En el Anexo 6 se indican las actuales.

CI: Costes Indirectos, expresados en porcentaje.

GG: Gastos Generales de la Empresa, expresados en porcentaje.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 414


BI: Beneficio Industrial, expresado en porcentaje.

BAJA: Coeficiente de baja o alza de un presupuesto de adjudicación, expresado en

porcentaje.

IVA: Impuesto del Valor Añadido, expresado en porcentaje.

DRC: Decimales del rendimiento y del factor de rendimiento de un presupuesto, y

decimales del resultado de su multiplicación. Por defecto 3 decimales.

DC: Decimales del importe de un presupuesto, de sus capítulos, subcapítulos, etc. y

líneas de medición (unidades de obra excluidas), y decimales de los importes

resultantes de multiplicar el rendimiento (o medición) total del presupuesto, sus

capítulos, subcapítulos, etc. y líneas de medición (unidades de obra excluidas) por

sus precios respectivos. Por defecto 2 decimales.

DFS: Decimales de los factores de rendimiento de las unidades de obra y de los

elementos compuestos. Por defecto 3 decimales.

DRS: Decimales de los rendimientos de las unidades de obra y de los elementos

compuestos, y decimales del resultado de la multiplicación de dichos rendimientos

por sus respectivos factores. Por defecto 3 decimales.

DUO: Decimales del coste total de las unidades de obra. Por defecto 2 decimales.

DI: Decimales de los importes resultantes de multiplicar los rendimientos

totales de los elementos compuestos y/o elementos simples por sus respectivos

precios, decimales del importe resultante del sumatorio de los costes directos de la

unidad de obra y decimales de los costes indirectos. Decimales de los sumatorios

sobre los que se aplican los porcentajes. Por defecto 2 decimales.

DES: Decimales del importe de los elementos simples. Por defecto 2 decimales.

DN: Decimales del campo número de partes iguales de la hoja de mediciones. Por

defecto 2 decimales.

DD: Decimales de dimensiones de las tres magnitudes de la hoja de mediciones.

Especificación FIEBDC-3/2007 / 415


Por defecto 2 decimales.

DS: Decimales del total de mediciones. Por defecto 2 decimales.

DSP: Decimales de la línea de subtotal de mediciones. Por defecto 2 decimales.

DEC: Decimales del importe de los elementos compuestos. Por defecto 2.

DIVISA: Es la divisa expresada en el mismo modo que las abreviaturas

utilizadas por el BCE (Banco Central Europeo), que en su caso deberán coincidir con

las del registro ~V. En el Anexo 6 se indican las actuales.

n: Es el número de la opción de la función BdcGloParNumero que se refiere al


concepto divisa.

Si un importe viene con un número mayor de decimales del estipulado en el registro


~K, se debe redondear al número de decimales indicado en dicho registro ~K (criterio
<5 queda igual y >= 5 suma), y las operaciones que se hagan del importe serán con
este valor redondeado.

Para relacionar una determinada divisa con su convención de decimales, deberá


coincidir el orden en que aparezcan las diferentes divisas en el registro ~K, con el
orden indicado en el registro ~V o con el orden de las opciones de la función
BdcGloOpcNumero, en función de su caso. Si en el registro ~V hay más ROTULOS
que divisas en el registro ~K, los precios sin su correspondiente divisa tomarán la
última divisa definida en el registro ~K.

Ejemplo de una base de precios que facilita importes de 2 ámbitos territoriales en 2


divisas (Se indican en negrita los campos afectados):

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \DDMMAA |


PROGRAMA_EMISION | [Precios de diferentes ámbitos territoriales en diferentes
divisas] \ { B-eur \ T-eur \ B-usd \ T-usd } | JUEGO_CARACTERES |[ TIPO
INFORM ACIÓN ] | [ NÚM ERO CERTIFICACIÓN ] | [ FECHA CERTIFICACIÓN ] |

~C | {CÓDIGO \ } | UNIDAD | RESUMEN | { 120 \ 108 \ 102,8 \ 92,52 } |


{ FECHA \ } | TIPO |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \
IVA | { DRC \ DC \ DFS \ DRS \ DUO \ DI \ DES \ DN \ DD \ DS \ DSP \ DEC \eur \
DRC \ DC \ DFS \ DRS \ DUO \ DI \ DES \ DN \ DD \ DS \ DSP \ DEC \ eur \
DRC \ DC \ DFS \ DRS \ DUO \ DI \ DES \ DN \ DD \ DS \ DSP \ DEC \ usd \ } [ n ]
|

Esquema aclaratorio:

Concepto Importe

Capítulo raíz DC (2)


(##)

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 416


Concepto interviniendo en una línea de descomposición

Concepto Factor Rendimiento FR Precio Importe


Factor*Rend. FR*Precio

Presupuesto DRC(3) DRC(3) DRC(3) DC(2) DC(2)

unitario

Capítulo(#) DC(2)*

Unidad de DFS(3) DS(2) DS(2) DUO(2) DC(2)

obra

Elemento DFS(3) DRS(3) DRS(3) DEC(2) DI(2)

compuesto

Elemento DFS(3) DRS(3) DRS(3) DES(2) DI(2)

simple

* El importe del Capítulo (#) será el sumatorio de los importes de sus


componentes.

Cálculo de precio de una unidad de obra

Unidad de Coste Coste Precio Coste


Obra directo indirecto directo + Coste

indirecto

Elemento DI(2) DI(2) DUO(2)

compuesto

Elemento DI(2) DI(2) DUO(2)

simple

M ediciones Cantidad Dimensiones Subtotal Total


Líneas de DN(2) DD(2) DSP(2) DS(2)

medición

Se ha añadido los decimales que se ponen por defecto según el formato después de
cada termino

Registro tipo concepto


Este registro contiene la INFORMACION básica de un concepto de cualquier tipo,
material, auxiliar, partida, capítulo, entidad, documento, etc., tanto en su VERSION
paramétrica como DEFINICIÓN tradicional.

~C | CÓDIGO { \ CÓDIGO } | [ UNIDAD ] | [ RESUMEN ] | { PRECIO \ } | { FECHA \


} | [ TIPO ] |

Especificación FIEBDC-3/2007 / 417


CÓDIGO: CÓDIGO del concepto descrito. Un concepto puede tener varios CODIGOs
que actuarán como sinónimos, este mecanismo permite integrar distintos sistemas
de clasificación. Puede tener un máximo de 20 caracteres.

Para distinguir el concepto tipo raíz de un archivo, así como los conceptos tipo
capítulo, se ampliará su CÓDIGO con los caracteres '##' y '#' respectivamente;
quedando dicha NOTACIÓN reflejada obligatoriamente en el registro tipo ~C ,siendo
opcional en los restantes registros del mismo concepto.

Las referencias a un CÓDIGO con y sin # y/o ##, se entienden únicas a un mismo
concepto.

Únicamente puede haber un concepto raíz en una base de datos u obra.

Si un código cuenta con un carácter '#' intercalado, se entenderá que corresponde al


conjunto CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO definido en el registro de Tipo
Relación Comercial (registro ~O) o en la función BdcComercCodigo.

UNIDAD: Unidad de medida. Existe una relación de unidades de medida


recomendadas, elaborada por la Asociación de Redactores de Bases de Datos de
CONSTRUCCIÓN. Véase el Anexo 7 sobre Unidades de Medida

RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el número de


caracteres que admite en su campo resumen. Se recomienda un máximo de 64
caracteres.

PRECIO: Precio del concepto. Un concepto puede tener varios precios alternativos que
representen distintas épocas, ámbitos geográficos, etc., definidos biunívocamente
respecto al campo [CABECERA \ {RÓTULO_IDENTIFICACION\} del registro ~V. Cuando
haya más de un precio se asignarán secuencialmente a cada RÓTULO definido; si
hay más ROTULOS que precios, se asignará a aquellos el último precio definido. En el
caso que el concepto posea descomposición, este precio será el resultado de dicha
descomposición y se proporcionará, de forma obligatoria, para permitir su
comprobación. En caso de discrepancia, tendrá preponderancia el resultado obtenido
por la descomposición, tal como se indica en el registro Tipo Descomposición, ~D, y
complementariamente se podría informar al usuario de dicha situación. Esto se
aplica también a los conceptos tipo capítulo y concepto raíz de una Obra o
Presupuesto. Como excepción a esta regla está el intercambio de mediciones no
estructuradas (véase la descripción del registro Tipo Mediciones, ~M).

FECHA: Fecha de la última actualización del precio. Cuando haya más de una fecha
se asignarán secuencialmente a cada precio definido, si hay más precios que fechas,
los precios sin su correspondiente fecha tomarán la última fecha definida.

Las fechas se definirán en el formato DDMMAAAA: DD representa el día con dos


dígitos, MM el mes y AAAA el año. Si la fecha tiene 6 ó menos dígitos, el año se
representará con dos dígitos (AA), interpretándose con el criterio “80/20”. Esto es,
cualquier año que sea igual o superior a 80 corresponderá al siglo XX y cualquier año
que sea menor de 80 corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos
representa mes y año únicamente (MMAA), si tiene menos de tres, solo el año (AA).
Si se identifica la fecha con un número impar de dígitos, se completará con el
carácter cero por la izquierda. Para representar una fecha sin un día o mes
específico, se utilizará un doble cero en cada caso.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 418


Ejemplos:
12062000 12 de junio de 2000

120699 12 de junio de 1999

00061281 junio de 1281

061281 6 de diciembre de 1981

401 abril de 2001

TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos:

0 (Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 (Materiales).

También se permite (y aconseja) utilizar la clasificación indicada por el BOE y la CNC


en índices y fórmulas polinómicas de revisión de precios así como los aconsejados por
la Asociación de Redactores de Bases de Datos de la Construcción. En el Anexo 4
aparecen los tipos actualmente vigentes.

Registro tipo descomposición


Este registro contiene la descomposición de un concepto en otros a través de una o
dos cantidades. El mismo registro lo emplearemos para definir la descomposición de
un concepto tipo unidad de obra en conceptos tipo materiales, mano de obra,
maquinaria y auxiliares y para la descomposición de un concepto tipo capítulo en
conceptos tipo unidad de obra o subcapítulo.

Si se define como concepto derivado un concepto que no posee partes variables en su


definición (no es un paramétrico) ni es un capítulo, entonces, un concepto derivado
sólo puede contener en su descomposición a conceptos derivados.

~D | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

CÓDIGO_PADRE: CÓDIGO del concepto descompuesto.

CÓDIGO_HIJO: CÓDIGO de cada concepto que interviene en la descomposición.

FACTOR: Factor de rendimiento, por defecto 1.0

RENDIMIENTO: Número de unidades, rendimiento o medición, por defecto 1.0

Cuando un capítulo interviene en una línea de descomposición, este no se ve


afectado ni por el factor ni por el rendimiento. Estos campos se intercambian con el
valor por defecto 1.0 en dicha línea de descomposición.

Cuando el CÓDIGO_HIJO incluye el carácter ‘%’ o el carácter ‘&’ es un porcentaje


sobre las líneas anteriores de la descomposición. El código de los porcentajes tiene
tres partes:

1. Prefijo, que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un carácter, que puede ser ‘&’ (porcentaje acumulable), o ‘%’ (porcentaje no


acumulable).

Especificación FIEBDC-3/2007 / 419


3. Una serie de caracteres libres que permite diferenciar un porcentaje de otro.

Ejemplo: OP%N0001

OP: Sobre todas la líneas anteriores cuyo código comience por OP.

%: Porcentaje no acumulable

N0001: Código diferenciador.

El rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la


actual y que queden afectadas por la máscara.

Ejemplo de una línea de descomposición: O%N0001 \\0.03\

Esta línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo código comience por O y cuyo texto
estará en la definición del código 'O%N0001'.

Ejemplo: ~C | O%N0001 | % | Medios auxiliares |

A efectos de cálculo de precios compuestos los porcentajes acumulables y no


acumulables se comportan de la misma forma. La diferencia entre ellos únicamente
se manifiesta en el cálculo de cantidades de simples que hay en un presupuesto,
para ello se consideraran los acumulables (‘&’) como porcentajes de perdidas, roturas
u otros casos que impliquen una mayor cantidad de los recursos en líneas
superiores. Los no acumulables (‘%’) se pueden referir a pequeño material u otros
casos que no impliquen una mayor necesidad de recursos en líneas superiores.

La existencia del factor en líneas de descomposición y el uso casi nulo que se ha


hecho de los porcentajes acumulables (‘&’) hace que éstos se mantengan por razones
históricas pero se desaconseja su uso.

En el caso que el importe de un concepto se pueda obtener mediante el campo precio


del registro ~C y también mediante el registro ~D, será el importe obtenido de este
último el que primará sobre el importe del primero.

Registro tipo añadir descomposición


Con este registro se pueden añadir líneas de descomposición, el registro tipo ~D
cambia la descomposición completa. Para añadir conceptos nuevos a una base de
datos, además de definir los registros C, T, L, D,… deberíamos posicionar los nuevos
conceptos en el capítulo o capítulos donde queramos situarlos, para ello, es necesario
un registro que nos permita añadir una o varias líneas de descomposición por cada
capítulo donde queramos posicionar un nuevo concepto.

~Y | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

Todos los campos tienen el mismo significado que en el registro tipo D.

Registro tipo texto


Este registro contiene el texto descriptivo de un concepto

~T | CÓDIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 420


CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito

TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de tamaño. El


texto podrá contener caracteres fin de línea (ASCII-13 + ASCII-10) que se
mantendrán al reformatearlo.

Registro tipo descripción paramétrica


Este registro contiene la descripción paramétrica, bien en formato tradicional bien
en formato API para DLL, que incluye la DEFINICIÓN de parámetros,
descomposiciones, comentario de ayuda a la selección de parámetros, resúmenes,
textos, pliegos, claves e INFORMACION comercial, en función de tablas, expresiones y
variables, para una familia de conceptos.

Este registro puede adoptar dos formas:

~P | | [ DESCRIPCION_PARAMETRICA ] | [ NOMBRE.DLL ] |

Cuando CÓDIGO_FAMILIA está lleno, o bien DESCRIPCION_PARAMETRICA está llena,


o bien DESCRIPCION_PARAMETRICA está vacía. En éste último caso se accede a la
descripción paramétrica de la familia a través del archivo NOMBRE.DLL.

~P | CÓDIGO_FAMILIA | [ DESCRIPCION_PARAMETRICA ] |

Cuando CÓDIGO_FAMILIA está vacío, se refiere al paramétrico global.

Si DESCRIPCION_PARAMETRICA está llena, el paramétrico global se establece a


partir de ésta. Si DESCRIPCION_PARAMETRICA está vacía y NOMBRE.DLL está lleno,
se establece a partir de éste. Si DESCRIPCION_PARAMETRICA y NOMBRE.DLL están
llenos a la vez, tan solo es válida DESCRIPCION_PARAMETRICA.

CÓDIGO_FAMILIA: CÓDIGO del concepto tipo familia descrito. Si se utiliza un modelo


de codificación dependiente de los parámetros (ver Anexos 2 y 3), este código debe
poseer un carácter ‘$’ en su séptima posición, y los conceptos en los que se deriva
tendrán como código los seis primeros caracteres del mismo más un carácter
adicional por cada parámetro que posea.

DESCRIPCION_PARAMETRICA: Ver Anexo 2.

NOMBRE.DLL: Ver Anexo 3.

REGISTRO TIPO PLIEGOS

Este registro contiene las diferentes secciones y textos del pliego de condiciones de
un concepto. El pliego de condiciones se estructura de forma jerárquica con el
Sistema de Clasificación por Codificación y de forma facetada en varias secciones de
distinto contenido.

Registro tipo pliegos


Cuando el primer campo del registro ~L está vacío, el registro define los CODIGOs de
las SECCIONES de cada pliego y sus ROTULOs correspondientes. Este registro es
único para una base de datos u obra.

Especificación FIEBDC-3/2007 / 421


Secciones de los pliegos
~L | | < CODIGO_SECCION_PLIEGO \ [ ROTULO_SECCION_PLIEGO ] \ > |

CÓDIGO_SECCION_ PLIEGO: CÓDIGO que define cada SECCION o faceta del pliego.

RÓTULO_SECCION_PLIEGO: DEFINICIÓN del RÓTULO asociado a cada CÓDIGO


correspondiente de cada SECCION o faceta del pliego.

Ejemplo de las secciones de los pliegos definidas para la Base de Datos de


CONSTRUCCIÓN de la Comunidad de Madrid y la Base de Datos de CONSTRUCCIÓN
de la Comunidad Valenciana, indicando CÓDIGO y RÓTULO de la SECCION:

~L| | DES\ DESCRIPCION Y COMPLEMENTOS AL TEXTO


\PRE\ REQUISITOS PREVIOS A LA EJECUCIÓN

\COM\ COMPONENTES

\EJE\ EJECUCIÓN Y ORGANIZACIÓN

\NOR\ NORMATIVA

\CON\ CONTROL Y ACEPTACIÓN

\SEG\ SEGURIDAD E HIGIENE

\VAL\ CRITERIOS DE VALORACIÓN Y MEDICIÓN

\MAN\ MANTENIMIENTO

\VAR\ VARIOS \ |

MODELO 1 DE TEXTOS DE LOS PLIEGOS.


Cuando el primer campo del registro ~L no está vacío, identifica a un concepto
determinado. Puede haber un registro de este tipo por cada concepto de una base de
datos u obra.

~L | CÓDIGO_CONCEPTO | { CÓDIGO_SECCION_PLIEGO \
TEXTO_SECCION_PLIEGO \ } |

{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_RTF \ } |
{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_HTM \ } |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.

CÓDIGO_SECCION_PLIEGO: DEFINICIÓN del CÓDIGO asociado a cada pliego.

TEXTO_SECCION_PLIEGO: Texto asignado a cada faceta o SECCION del pliego de


condiciones del concepto.

El pliego de condiciones de cada concepto estará dividido con caracteres '\' en varias
secciones o facetas, pensadas para imprimirse juntas o por separado.

Los fines de línea de cada SECCION del pliego se tratarán como en el REGISTRO
TIPO TEXTO.

ARCHIVO_TEXTO_RTF: Es el nombre del archivo que contiene el texto en formato


RTF asignado a cada SECCION del pliego del concepto. Dicho archivo deberá ubicarse

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 422


en el mismo directorio donde se hallen el/los archivos con extensión BC3 que
incluyen su referencia.

ARCHIVO_TEXTO_HTM: Es el nombre del archivo que contiene el texto en formato


HTM asignado a cada SECCION del pliego del concepto. Dicho archivo deberá
ubicarse en el mismo directorio donde se hallen el/los archivos con extensión BC3
que incluyen su referencia.

MODELO 2 DE TEXTOS DE LOS PLIEGOS.


Otra opción permite asignar el Pliego mediante párrafos de texto asociados a
conceptos, utilizando el siguiente esquema de registros, como forma alternativa a la
anterior:

~Q | < CODIGO_CONCEPTO \ > | { CÓDIGO_SECCION_PLIEGO \


CÓDIGO_PARRAFO \ { ABREV_AMBITO; } \ } |

~J | CÓDIGO_PARRAFO | [ TEXTO_PARRAFO ] | | [ ARCHIVO_PARRAFO_RTF ] |


[ ARCHIVO_PARRAFO_HTM ] |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.


Será único para cada registro ~Q.

Este registro es de sustitución de la INFORMACION, no es de acumulación.

CÓDIGO_SECCION_PLIEGO: DEFINICIÓN del CÓDIGO asociado a cada pliego.


Corresponde al definido en el registro de cabecera de pliego ~L.

CÓDIGO_PARRAFO: CÓDIGO del texto asociado a cada sección del pliego.

ABREV_AMBITO: Identificador del ámbito geográfico de la sección del pliego. Se


define en un registro propio.

TEXTO_PARRAFO: Texto que define el contenido de los pliegos que se asocian a un


concepto y se identifica con CÓDIGO_PARRAFO.

TEXTO_PARRAFO_RTF: Texto que define el contenido de los pliegos que se asocian a


un concepto y se identifica con CÓDIGO_PARRAFO, con formato RTF, de forma
opcional, siendo siempre obligatorio el campo TEXTO_PARRAFO.

ARCHIVO_PARRAFO_RTF: Es el nombre del archivo en formato RTF que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CÓDIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

ARCHIVO_PARRAFO_HTM: Es el nombre del archivo en formato HTM que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CÓDIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

Registro tipo ámbito geográfico


Establece el ámbito geográfico correspondiente a los Pliegos de Condiciones asociados
a la Base de Datos. No necesariamente deberá corresponder al campo CABECERA
definido en el registro ~V.

Especificación FIEBDC-3/2007 / 423


~W | < ABREV_AMBITO \ [ AMBITO ] \ > |

ABREV_AMBITO: Nombre abreviado que identifica el territorio geográfico al que se


refiere. (Comunidad Autónoma, Provincia, Región, Comarca, Localidad, etc.). El
identificador < * > (ASCII - 42) indica AMBITO_GENERAL, y representa todo el
territorio nacional.

AMBITO: Nombre completo del territorio geográfico.

Existe una relación de abreviaturas recomendadas, elaborada por la Asociación de


Redactores de Bases de Datos de CONSTRUCCIÓN, que se puede consultar en el
Anexo 5.

Registro tipo información gráfica


Este registro contiene el/los archivos gráficos asociados a un concepto. Todos los
archivos externos deben ubicarse en el mismo directorio donde se hallen el/los
archivos con extensión BC3 que incluyen su referencia.

~G | CÓDIGO_CONCEPTO | < ARCHIVO_GRAFICO. EXT \ > |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito en la base de datos y contenido


en ella.

ARCHIVO_GRAFICO. EXT: Nombre del archivo que contiene la INFORMACION gráfica.


Se usarán como referencia programas estandarizados de uso general, para chequear
y verificar el contenido del fichero. Estos programas serán:

Ficheros tipo ráster: Extensión .BMP, .PCX : Windows 3.1

Extensiones .GIF, .JPG, .PNG: MS Internet Explorer 5.5

Extensión .TIF: Paint Shop Pro 4.0

Ficheros vectoriales: Extensión .WMF : Windows 3.1

Extensión .DXF : Autocad 12 Windows

Registro tipo entidad


Define las entidades suministradoras de documentación técnica, tarifas de precios y
especificaciones de los conceptos contenidos en la Base de Datos.

~E | CÓDIGO_ENTIDAD | [ RESUMEN ] | [ NOMBRE ] | { [ TIPO ] \ [ SUBNOMBRE ] \


[ DIRECCIÓN ] \ [ CP ] \ [ LOCALIDAD ] \ [ PROVINCIA ] \ [ PAIS ] \ { TELEFONO; } \
{ FAX; } \ {PERSONA_CONTACTO; } \ } | [ CIF ] \ [ WEB ] \ [ EMAIL ] \ |

CÓDIGO_ENTIDAD: CÓDIGO del SCc que define a la entidad (empresa, organismo,


etc.).

RESUMEN: Nombre abreviado de la entidad

NOMBRE: Nombre completo de la entidad.

TIPO: Se definen los siguientes:

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 424


C central.

D delegación.

R representante.

SUBNOMBRE: Nombre de la delegación o representante en caso de que sea distinto


de la central. Normalmente estará vacío.

DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAIS: Dirección postal de la entidad


con todos sus datos, existiendo una dirección por cada subcampo tipo, de forma
ordenada y secuencial.

TELEFONO: Números de teléfono de la entidad, de forma ordenada y secuencial


respecto al subcampo tipo, separados con el carácter < ; > (ASCII-59). Se indicará con
nueve caracteres numéricos, incluido el prefijo de la provincia.

FAX: Números de fax de la entidad, con las mismas especificaciones que el campo
anterior.

PERSONA_CONTACTO: Nombre de las personas de contacto con la entidad y cargo que


desempeña, podrá haber varias asociadas a cada subcampo tipo, de forma que estén
separadas por el carácter ASCII-59.

CIF: Código de Identificación Fiscal de la empresa.

WEB: Página web de la empresa.

MAIL: Dirección de correo electrónico de la empresa.

Registro tipo relación comercial


Este registro establece los vínculos entre los conceptos de una Base de Datos General
( BDG ) con los productos comerciales de una Base de Datos Específica ( BDE ), y/o
viceversa.

Así una Base de Datos ( BD ) podrá contener CONCEPTOS genéricos de una BDG,
CONCEPTOS referentes a productos comerciales de una BDE, o ambas a la vez.

~O | CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO | | < CODIGO_ARCHIVO \


CODIGO_ENTIDAD # CODIGO_CONCEPTO \ > |

CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CÓDIGO_RAIZ_BD: Se refiere a la identificación del CÓDIGO de la entidad que


elabora la BD. Este CÓDIGO debe ser facilitado por la entidad que elabora la BD,
para evitar ambigüedades. Se recomienda que éste sea el propio CIF de la entidad.

CÓDIGO_CONCEPTO: Se refiere a un concepto que pertenece a CÓDIGO_RAIZ_BD,


y empleado por ésta en su sistema de clasificación por codificación.

CÓDIGO_ARCHIVO: Se refiere al nombre del archivo que, de existir, indica el lugar


donde se encuentra la INFORMACION referente a CÓDIGO_ENTIDAD #
CÓDIGO_CONCEPTO. Sin embargo si dicho CÓDIGO_ARCHIVO no existe, entonces
indica que CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO se encuentra en la misma BD.

Especificación FIEBDC-3/2007 / 425


CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO: Identificador de un concepto de una BD,
donde:

CÓDIGO_ENTIDAD: Se refiere a la identificación del CÓDIGO de la entidad a la que


se le asocia INFORMACION. Este CÓDIGO debe ser facilitado por la entidad que
elabora la BD, de acuerdo con su sistema de clasificación, para evitar
ambigüedades. Se recomienda que éste el propio CIF de la entidad.

CÓDIGO_CONCEPTO: Se refiere a un concepto que pertenece a CÓDIGO_ENTIDAD,


y empleado por la entidad que elabora la BD en su sistema de clasificación por
codificación.

Cuando CÓDIGO_CONCEPTO se refiera a un producto comercial, dicho CÓDIGO


deberá ser facilitado por el fabricante, y no podrá coincidir nunca con la designación
de CÓDIGO_RAIZ_BD, CÓDIGO_ENTIDAD o CÓDIGO_CONCEPTO, cuando éste se
refiere a un concepto genérico. Al tener dicho producto comercial un tratamiento de
CONCEPTO, éste puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica, etc.). Para
poder utilizar los registros mencionados, el código identificador del concepto será
CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO.

Registro tipo información técnica


Este registro contiene la ESPECIFICACIÓN de otros datos referentes al concepto,
como por ejemplo, peso específico o nominal, características físicas, cuantías
geométricas, propiedades físico-mecánicas, etc.

Estos datos podrían emplearse en otras utilidades, como el cálculo de los coeficientes
de transmisión térmica, aislamiento acústico, etc.

El registro tipo INFORMACION Técnica puede adoptar dos formas:

Si el primer campo está vacío, éste sirve como diccionario de términos de


INFORMACION Técnica a los cuales se les podrá asociar una descripción y una
unidad de medida.

~X | | < CODIGO_IT \ DESCRIPCION_IT \ UM \ > |

Si el primer campo identifica a un concepto, la INFORMACION que se especificará a


continuación serán la/las parejas de términos de INFORMACION técnica con sus
respectivos valores.

~X | CÓDIGO_CONCEPTO | < CODIGO_IT \ VALOR_IT \ > |

CÓDIGO_IT: CÓDIGO de la INFORMACION Técnica descrita.

DESCRIPCION_IT: Texto descriptivo de la INFORMACION Técnica, sin limitación de


tamaño.

UM: En el caso que los valores de la INFORMACION Técnica sean valores numéricos,
se indicará su Unidad de Medida, de acuerdo con el Sistema Internacional de
Unidades de Medida.

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 426


Será único para cada registro ~X.

VALOR_IT: Valor alfabético o numérico de la INFORMACION Técnica.

Registro tipo mediciones


En este registro figuran las mediciones (cantidades), en que interviene un concepto
de un presupuesto en la descomposición de otro de mayor rango.

En el intercambio de archivos de presupuestos, deberá figurar siempre este registro,


exista o no desglose de mediciones.

Cuando se trate de intercambiar una relación de registros ~M que recogen un listado


de mediciones no estructurado, no es necesario la disposición de un CÓDIGO raíz ni
los registros ~D complementarios. El operador indicará en estos casos cual es el
destino de la medición.

~M | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICIÓN \ } | MEDICION_TOTAL

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |


[ETIQUETA] |

CÓDIGO_PADRE: CÓDIGO del concepto padre o concepto descompuesto del


presupuesto.

CÓDIGO_HIJO: CÓDIGO del concepto hijo o concepto de la línea de descomposición.

Este campo es opcional en el caso de intercambiar mediciones no estructuradas, es


decir, que no pertenecen a la estructura general y completa de un presupuesto.

POSICIÓN: Posición del CONCEPTO_HIJO en la descomposición del


CONCEPTO_PADRE, este dato permite identificar la medición cuando la
descomposición del concepto padre incluye varios conceptos hijo con el mismo
CÓDIGO, la numeración de las posiciones comenzará con el 1.

El campo POSICIÓN deberá especificarse siempre en intercambio de presupuestos


cuando éste sea completo y estructurado, e indicará el camino completo de la
medición descrita en la estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la
medición correspondiente al capítulo 3 del archivo; subcapítulo 5 del capítulo 3; y
partida 2 del subcapítulo 5. En mediciones no estructuradas este campo es opcional.

MEDICION_TOTAL: Debe coincidir con el rendimiento del registro tipo '~D'


correspondiente.

Incorpora el sumatorio del producto de unidades, longitud, latitud y altura o el


resultado de expresiones de cada línea, al leer este registro se recalculará este valor.

TIPO: Indica el tipo de línea de medición de que se trate. Usualmente este subcampo
estará vacío. Los tipos establecidos en esta VERSION son:

Subtotal parcial: En esta línea aparecerá el subtotal de las líneas anteriores desde
el último subtotal hasta la línea inmediatamente anterior a ésta.

Subtotal acumulado: En esta línea aparecerá el subtotal de todas las líneas


anteriores desde la primera hasta la línea inmediatamente anterior a ésta.

Especificación FIEBDC-3/2007 / 427


Expresión: Indicará que en el subcampo COMENTARIO aparecerá una expresión
algebraica a evaluar. Se podrán utilizar los operadores '(', ')', '+', '-', '*', '/' y '^'; las
variables 'a', 'b', 'c' y 'd' (que tendrán por valor las cantidades introducidas en los
subcampos UNIDADES, LONGITUD, LATITUD y ALTURA respectivamente); y la
constante 'p' para el valor Pi=3.1415926. Esta expresión será válida hasta la
siguiente línea de medición en la que se defina otra expresión. Solo se evalúa la
expresión y no se multiplica por las unidades. Las expresiones fórmulas utilizan los
criterios definidos en el anexo 2.

COMENTARIO: Texto en la línea de medición. Podrá ser un comentario o una


expresión algebraica.

UNIDADES, LONGITUD, LATITUD, ALTURA: Cuatro número reales con las


mediciones. Si alguna magnitud no existe se dejará este campo vacío.

ETIQUETA: Es opcional, surge de la necesidad de transmitir un identificador de los


conceptos (capítulos, subcapítulos o partidas). Este identificador lo imprimen,
diversos programas, en los listados de mediciones o presupuesto de una Obra (por
ejemplo, ‘2.10’, ‘A-27b’, ‘001001’,…); siendo único para cada concepto (capítulo,
subcapítulo o partida) y, en general, diferente de la codificación de la base de datos
empleada para confeccionar el presupuesto (El ‘CÓDIGO_HIJO’ muchas veces no
aparece en los listados mencionados).

Para transmitir la etiqueta de un capítulo, o subcapítulo, del presupuesto, también se


utilizará este registro. En ese caso, el campo MEDICION_TOTAL, habitualmente,
será 1 y los campos TIPO, COMENTARIO, UNIDADES, LONGITUD, LATITUD y ALTURA
no existirán:

~M | [CÓDIGO_PADRE\] CÓDIGO_HIJO | {POSICION\} |1| | [ETIQUETA] |

REGISTRO TIPO AÑADIR MEDICIONES

Igual que el registro tipo ~M pero añade las líneas de medición de este registro a las
ya existentes en vez de sustituir toda la medición como hace en aquel.

~N | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } |MEDICION

| {TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |


[ETIQUETA]|

Registro tipo claves


Este registro establece la relación entre CODIGOs y descriptores del tesauro, para
permitir la búsqueda de conceptos mediante términos clave.

~A | CÓDIGO_CONCEPTO | < CLAVE_TESAURO \ > |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito en la base de datos y contenido


en ella.

CLAVE_TESAURO: Términos clave relacionados con el concepto. Los términos


compuestos (hormigón armado, cartón-yeso, mortero mixto) se identificarán unidos
mediante < _ > (ASCII - 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No
está permitido el empleo del espacio en blanco.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 428


Registro tipo cambio de código
Con este registro se posibilita el cambio o anulación de los CODIGOs de los
conceptos, única unidad de INFORMACION que no se podía modificar con los registros
definidos anteriormente.

~B | CÓDIGO_CONCEPTO | CÓDIGO_NUEVO |

CÓDIGO_CONCEPTO: CÓDIGO del concepto a cambiar o anular. Debe existir y


pertenece a un concepto contenido en la BD

CÓDIGO_NUEVO: Nuevo CÓDIGO para CÓDIGO_CONCEPTO, no debe existir


previamente. Si este campo está vacío, se entiende que hay que eliminar
CÓDIGO_CONCEPTO.

Registro tipo documento adjunto


Este registro permite asociar a un concepto archivos con diferentes tipos de
información.

~F | CÓDIGO_CONCEPTO | { TIPO \ { ARCHIVO.EXT ; } \ [ DESCRIPCION_ARCHIVO ]


\}|

donde:

CÓDIGO_CONCEPTO: Código del concepto descrito en la base de datos y contenido en


ella al cual se le asocia una información en forma de archivo.

TIPO: Código del tipo de información que contiene el archivo.

Inicialmente se consideran los siguientes:


0- otros

1- características técnicas y de fabricación

2- manual de colocación, uso y mantenimiento

3- certificado/s de elementos y sistemas

4- normativa y bibliografía

5- tarifa de precios

6- condiciones de venta

7- carta de colores

8- ámbito de aplicación y criterios selección

9- cálculo de elementos y sistemas

10- presentación, datos generales, objetivos, etc. de empresa

11- certificado/s de empresa

12- obras realizadas

ARCHIVO.EXT: Nombre del archivo con extensión que contiene información de


CÓDIGO_CONCEPTO.

Especificación FIEBDC-3/2007 / 429


Un archivo (principal) puede contener archivos vinculados, separados con el carácter
< ; > (ASCII-59), siendo el principal el primero que se muestre. Todos los archivos
(incluso los vinculados) deben ubicarse en el mismo directorio donde se hallen el/los
archivos con extensión BC3 que incluyen su referencia.

Además de las extensiones permitidas en los registros ~G, ~L y ~J, se añaden los
siguientes usando como referencia programas estandarizados de uso general, para
chequear y verificar el contenido del fichero:
Extensión .PDF: Acrobat Reader v.5

Extensión .AVI: Media Player v.7

Extensión .PPT: Power Point v.10

DESCRIPCION_ARCHIVO: Breve descripción de la información contenida en el


archivo.

Formato FIEBDC-3. Resumen


~V | [ PROPIEDAD_ARCHIVO ] | VERSION_FORMATO [ \ DDMMAAAA ] |

[ PROGRAMA_EMISION ] | [ CABECERA ] \ { RÓTULO_IDENTIFICACION \ }

| [ JUEGO_CARACTERES ] | [ COMENTARIO ] | [ TIPO INFORMACIÓN ] |

[ NÚMERO CERTIFICACIÓN ] | [ FECHA CERTIFICACIÓN ] |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | [ [CI] \

[GG] \ [BI] \ [BAJA] \ [IVA] ] | { DRC \ DC \ DFS \ DRS \ DUO \ DI \

DES \ DN \ DD \ DS \ DSP \ DEC \ DIVISA \ } | [n]|

~C | CÓDIGO { \ CÓDIGO } | [ UNIDAD ] | [ RESUMEN ] | { PRECIO \ } |

{ FECHA \ } | [ TIPO ] |

~D | CÓDIGO_PADRE |< CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ >|

~Y | CÓDIGO_PADRE |< CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ >|

~T | CÓDIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

~P | | [ DESCRIPCION_PARAMETRICA ] | [ NOMBRE.DLL ] |

~P | CÓDIGO_FAMILIA | [ DESCRIPCION_PARAMETRICA ] |

~L | | < CODIGO_SECCION_PLIEGO \ [ ROTULO_SECCION_PLIEGO ] \ > |

~L | CÓDIGO_CONCEPTO | { CÓDIGO_SECCION_PLIEGO \

TEXTO_SECCION_PLIEGO \ } |

{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_RTF \ } |

{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_HTM \ } |

~Q | < CODIGO_CONCEPTO \ > | { CÓDIGO_SECCION_PLIEGO \

CÓDIGO_PARRAFO \ { ABREV_AMBITO; } \ } |

~J | CÓDIGO_PARRAFO | [ TEXTO_PARRAFO ] | |

[ ARCHIVO_PARRAFO_RTF ] | [ ARCHIVO_PARRAFO_HTM ] |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 430


~W | < ABREV_AMBITO \ [ AMBITO ] \ > |

~G | CÓDIGO_CONCEPTO | < ARCHIVO_GRAFICO. EXT \ > |

~E | CÓDIGO_ENTIDAD | [ RESUMEN ] | [ NOMBRE ] | { [ TIPO ] \

[ SUBNOMBRE ] \ [ DIRECCIÓN ] \ [ CP ] \ [ LOCALIDAD ] \ [ PROVINCIA ]

\ [ PAIS ] \ { TELEFONO; } \ { FAX; } \ {PERSONA_CONTACTO; } \ } |

[ CIF ] \ [ WEB ] \ [ EMAIL ] \ |

~O | CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO | | < CODIGO_ARCHIVO \

CODIGO_ENTIDAD # CODIGO_CONCEPTO \ > |

~X | | < CODIGO_IT \ DESCRIPCION_IT \ UM \ > |

~X | CÓDIGO_CONCEPTO | < CODIGO_IT \ VALOR_IT \ > |

~M | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } | MEDICION |

{ TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ }

| [ETIQUETA] |

~N | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } | MEDICION |

{ TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \

ALTURA \ } | [ETIQUETA] |

~A | CÓDIGO_CONCEPTO | < CLAVE_TESAURO \ > |

~B | CÓDIGO_CONCEPTO | CÓDIGO_NUEVO |

~F | CÓDIGO_CONCEPTO |{ TIPO \ { ARCHIVO.EXT ; } \

[ DESCRIPCION_ARCHIVO ] \ }|

Anexo 1. Cambios respecto a versiones anteriores: 3/2004, 3/2002,


3/98 y 3/95.
Resumen de los cambios de la versión 3/2004 con respecto a 3/2002:
- Especificación: incluir la notación <a> para campos opcionales.

- ~V Registro tipo VERSIÓN: Nuevo campo COMENTARIO.

- ~K Registro tipo COEFICIENTES: Se establece los decimales por defecto,

modificaciones de algunos campos decimales.

- ~D Registro tipo DESCOMPOSICIÓN: Se establece el valor por defecto para el

rendimiento.

- ~C Registro tipo CONCEPTO: Modificaciones de los campos CÓDIGO y PRECIO.

- ~M y ~N Registro tipo MEDICION y AÑADIR MEDICION: Nuevo campo ETIQUETA.

- Registros actualizados con las notaciones para definir campos obligatorios y

opcionales: V, D, Y, T, L, Q, W, G, O, X, A y B.

- Nuevo registro ~F Tipo documento adjunto.

Especificación FIEBDC-3/2007 / 431


Cambios de la API estándar para descripciones paramétricas compiladas:
- Nueva función BdcTipoDescripcion().

- Nueva función BdcInvalidos() .

- Aclaración de la función BdcPliego().

- Modificación de los parámetros de la función BdcComercCodigo().

- Nuevo mensaje de error BDCERR_PARÁMETRO_INCORRECTO.

- Nuevas funciones BdcDocNumero() y BdcDocCodigo() relacionadas con el registro ~F

tipo documento adjunto.

Clasificación en tipos de los conceptos:

-Nuevo tipo Presupuesto Unitario.

Resumen de los cambios de la versión 3/2007 con respecto a 3/2004:


-Especificación.- Aclaración sobre la prohibición de usar espacios en blanco en los

códigos de los conceptos: “incluyendo A-Z, a-z, 0-9, ñ, Ñ,” … “Excluyendo cualquier otro

carácter como espacio, tabulador, etc”.

-V Registro tipo VERSIÓN: Nuevos campos TIPO INFORMACIÓN, NÚMERO

CERTIFICACIÓN y FECHA CERTIFICACIÓN.

-K Registro tipo COEFICIENTES: Se suprimen los campos DRO Y DFO. Se añaden los

campos DSP y DEC.

-C Registro tipo CONCEPTO: Limitación del código a 20 caracteres. Recomendación

de 64 caracteres como máximo para el resumen.

-D Registro tipo DESCOMPOSICIÓN: Eliminar factor y rendimiento de los capítulos.

-M Registro tipo MEDICIÓN: Aclaración sobre el uso de expresiones.

Anexo 4: Aclaración sobre que el tipo Presupuesto Unitario no debe usar la # del tipo
capítulo.

A continuación se indica la lista de apartados y registros del

FIEBDC-3/2007 afectados por ampliaciones y/o modificaciones:

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 432


Apartado FIEBDC- FIEBDC- FIEBDC- FIEBDC-
3/2004 3/2002 3/98 3/95
PRESENTACIÓN. X X X X

FORMATO FIEBDC-3. ESPECIFICACIÓN. X X X X

~V. Registro tipo PROPIEDAD Y VERSION. X X X X

~K. Registro tipo COEFICIENTES. X X X X

~C. Registro tipo CONCEPTO. X X X X

~D.,Registro tipo DESCOMPOSICIÓN. X X X X

~Y.,Registro tipo AÑADIR X X X

DESCOMPOSICIÓN.

~T. Registro tipo TEXTO. X X X

~P. Registro tipo DESCRIPCIÓN X

PARAMETRICA.

~L. Registro tipo PLIEGOS. X X X

~Q. Registro tipo PLIEGOS. X X X

~W. Registro tipo AMBITO GEOGRÁFICO. X X X

~G. Registro tipo INFORMACION GRÁFICA. X X X

~E. Registro tipo ENTIDAD. X X

~O. Registro tipo RELACION COMERCIAL. X X X

~X. Registro tipo INFORMACION TÉCNICA. X X X

~M. Registro tipo MEDICIÓN. X X X X

~N. Registro tipo AÑADIR MEDICIÓN X X X

~A. Registro tipo CLAVES. X X X

~B. Registro tipo CAMBIO DE CÓDIGO. X X X

~F. Registro Tipo DOCUMENTO ADJUNTO. X X X

Anexo 3. API ESTÁNDAR para descripciones X X X

paramétricas compiladas en DLL

Anexo 4. Clasificación en tipos de los X X X X

Conceptos

Anexo 2. Descripción paramétrica: Formato Estándar


Un concepto paramétrico es el que define su CÓDIGO, resumen, texto, pliego,
descomposición e INFORMACION comercial de forma paramétrica, esto es, de una
forma variable mediante tablas y expresiones aritméticas y lógicas función de
parámetros.

Especificación FIEBDC-3/2007 / 433


En la descripción paramétrica se encuentran las siguientes sentencias:

Se definen las variables:


%A %B %C %D Parámetros seleccionados del concepto, de "a" a "z" ~ 1 a 26.

%O %P %Q %R Parámetros seleccionados de la obra, de "a" a "z" ~ 1 a 26.

%E Variable que define las condiciones de error.

$A $B $C $D Textos de los parámetros seleccionados del concepto.

$O $P $Q $R Textos de los parámetros seleccionados de la obra.

$E Variable que define los textos de error.

De forma equivalente las variables %O a %R y $O a $R tomarían el valor


correspondiente a los valores de los parámetros generales de la obra.

Cualquier variable de la 'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se
puede definir o redefinir con cualquier número de dimensiones para ser utilizada
posteriormente en expresiones.

Se definen las constantes de la 'a' a la 'z' con los valores numéricos del 1 al 26
respectivamente, para permitir referenciar los parámetros de forma nemotécnica.
Para la utilización de otro tipo de caracteres, se determinará en el texto de la opción
del parámetro seleccionado el carácter de sustitución que se desea utilizar,
anteponiéndole un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se
realiza relacionando el carácter con la posición que ocupa.

Ejemplo: PBPO.2$ M3 Hormigón $B $A


\ CONSISTENCIA \ plástica \ fluida \ blanda \

\ RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \

El derivado PBPO.2aa sería: M3 Hormigón H-125 plástica

Con el carácter especial:

\ CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \

\ RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \

El mismo derivado sería: PBPO.2p2 M3 Hormigón H-125 plástica.

Las variables numéricas deben permitir valores reales en coma flotante de doble
precisión (64bits) y las variables alfanuméricas deben poder almacenar textos de
cualquier tamaño.

Cualquier variable puede definirse, en la misma asignación, con cualquier número


y tamaño de dimensiones (hasta 4), en la DEFINICIÓN de dimensiones tendrán que
hacerse explícitas todas las dimensiones.
%U=...... # define una variable con un dato numérico

$X(8)=..... # define una lista de 8 datos alfanuméricos

%V(3,4)= ..... # define una tabla con 3 filas y 4 columnas de datos n.

Las variables %E y $E son especiales para devolver errores producidos por selecciones

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 434


de parámetros no coherentes. En una evaluación secuencial de expresiones, si en
una expresión la variable %E adopta un valor distinto de 0, ha habido algún error, se
interrumpe la evaluación de expresiones y se presenta el contenido de la variable $E
donde se almacena el texto del error producido.

Pueden haber múltiples asignaciones de %E, cada una de ellas precedida de su


correspondiente texto de error, asignación de $E.

Las constantes alfanuméricas se definirán entre comillas ($I="incluida parte


proporcional").

En la descripción paramétrica podemos encontrar los siguientes tipos de sentencias:

SENTENCIA DE ROTULOS DE PARÁMETRO:

\ <ROTULO del parámetro> \ { <ROTULO de la opción> \ }

Los parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el


orden que se encuentren.

SENTENCIA DE ASIGNACIÓN NUMÉRICA:

<variable numerica> = <expresión numérica>

SENTENCIA DE ASIGNACIÓN ALFANUMÉRICA:

<variable alfanumerica> = <expresión alfanumérica>

SENTENCIA DE RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)

<texto de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ] Se


pueden definir uno u opcionalmente dos rendimientos, el defecto del
rendimiento opcional es 1.

SENTENCIA DE MEDIOS AUXILIARES:

%: <expresión numérica> (en tanto por cien)

%%: <expresión numérica> (en tanto por uno)

SENTENCIA DE PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>

En caso de figurar conjuntamente un juego de sentencias de rendimiento a modo


de descomposición y una sentencia de precio, tendrá prioridad la sentencia de
precio, ignorando las sentencias de rendimiento.

SENTENCIA DE COMENTARIO:

\ COMENTARIO \ ó \ C \ <texto del comentario> \

Si existe texto de comentario, se presentará como ayuda a la selección de


parámetros junto a las opciones de éstos.

SENTENCIA DE SUSTITUCION:
\ RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \

Especificación FIEBDC-3/2007 / 435


\ TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \

\ PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }

\ CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }

\ COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\

<expresión_numérica>\}

Se considera que una sentencia continua en la línea siguiente si:

Acaba en un operador

Acaba sin cerrar comillas '"'

Comienza con '\' y no acaba con '\'

<constantes> PI, números, "texto" ...

<funciones> ABS( ), INT( ), SQRT( ) ...

<variables> [$%] [A-Z] [(dimensión{,dimensión})]

<expresión numérica>:

Son aquellas que dan como resultado un número en función de constantes y


variables numéricas, expresiones lógicas, funciones y operadores.

por ejemplo: %I= %A + 3.17*(1+%B) + ABS(%P+3.15*%Q)/12000

<expresión alfanumérica>:

Son aquellas que dan como resultada un texto en función de constantes y


variables alfanuméricas, operadores y funciones numéricas.

Una expresión alfanumérica puede incluir expresiones lógicas.

por ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)

añadir " de perdidas" a $I si el valor actual de %A es mayor que <a> ó 1.

<expresiones lógicas>:

Son aquellas que dan como resultado VERDADERO o FALSO. En expresiones


numéricas el verdadero se considera como 1 y el falso como 0, en
alfanuméricas el falso se considera suprimir texto.

%I = 323*(%A=a) + 345*(%A=b) + 1523*($I=$A & $J=$B)

$I = "blanco"*(%C=c) + "negro"*(%C=d)

<texto de sustitución>:

En los textos de sustitución la INFORMACION es un texto constante (sin


comillas) con variables embebidas en él. Se consideran variables los
caracteres $ y % inmediatamente seguidos por una letra de la A a la Z.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 436


En los textos de sustitución, las variables alfanuméricas se sustituyen por
sus contenido de texto correspondiente, las numéricas se sustituyen por las
constantes de la "a" a la "z" correspondientes al valor numérico de su
contenido.

En la expresión del rendimiento, la primera parte de la sentencia es un texto


de sustitución que una vez sustituidas las variables será el CÓDIGO del
concepto al que le corresponde la expresión numérica de la segunda parte de
la expresión como rendimiento. Si el resultado es 0, se ignora la sentencia y
no se considera ese componente o línea de descomposición.

CONVENIOS DE NOTACIÓN (EBNF)


[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

[a-b] Indica cualquier valor desde "a" a "b" inclusivas

[abc] Indica cualquiera de los valores a, b ó c

<abc> Indica descripción informal

abc Indica símbolo terminal

%[A-Z] Variable numérica

$[A-Z] Variable alfanumérica

Variables predefinidas:
[%$][ABCD] Parámetros del concepto

[%$][OPQR] Parámetros de la obra

[%$]E Variable especial para reportar errores

[%$][A-Z][(dim{,dim})] Variables definibles

# Comentarios (el texto comprendido entre este carácter y el siguiente

final de línea exclusive, no se tiene en cuenta)

, Separador de datos

: DEFINICIÓN de rendimiento

:: DEFINICIÓN de precio

%: DEFINICIÓN de medios auxiliares en tanto por cien

%%: DEFINICIÓN de medios auxiliares en tanto por uno

OPERADORES NUMÉRICOS (De menor a mayor precedencia)


+ Suma

- Resta

* Multiplicación

/ División

^ Operador elevado a

Especificación FIEBDC-3/2007 / 437


OPERADORES LÓGICOS (De menor a mayor precedencia)
@ Operador lógico O

& Operador lógico Y

< Menor

> Mayor

<= Menor o igual

>= Mayor o igual

= Igual

<> Diferente

! Operador lógico NO

FUNCIONES -- VALOR RETORNADO:


ABS(n) Valor absoluto de "n"

INT(n) Parte entera de "n"

ROUND(n,d) Redondeo de "n" a "d" decimales

SIN(n) Seno (grados sexagesimales)

COS(n) Coseno (grados sexagesimales)

TAN(n) Tangente (grados sexagesimales)

ASIN(n) Arco seno (gs)

ACOS(n) Arco coseno (gs)

ATAN(n) Arco tangente (gs)

ATAN2(x,y) Arco tangente con dos parámetros "x" e "y"

SQRT(n) Raíz cuadrada de "n"

ATOF(a) Conversión de alfanumérico "a" a numérico

FTOA(n) Conversión de numérico "n" a alfanumérico

Cada instrucción irá en distinta línea, a menos que la instrucción acabe en un


operador en cuyo caso se considera que sigue en la siguiente línea.

Si una línea acaba sin haber cerrado las comillas '"' o delimitador '\', se considerará
que sigue en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.

CONTROL DE ERRORES DE SELECCIÓN.


Es frecuente encontrar un gran número de combinaciones de parámetros posibles
pero tener pocas de ellas resueltas. Para evitar que el operador del sistema pruebe
distintas combinaciones de parámetros consiguiendo en todas ellas un mensaje de
error, el sistema debe ser capaz de guiarle en la selección de combinaciones
correctas.

Cada vez que el operador define un parámetro, el sistema evaluará todas las

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 438


sentencias posibles y en las sentencias del tipo: %E= ...., función de parámetros

Si todos los parámetros intervinientes en la expresión son conocidos, se evaluará


ésta y si el resultado fuera de ERROR se presentará la previa DEFINICIÓN de $E con
el mensaje del error.

Si todos los parámetros menos uno son conocidos, se irá dando valores al parámetro
desconocido y evaluando la expresión hasta recorrer todos los valores válidos del
parámetro. De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.

Cada vez que se defina o redefina un parámetro el sistema actualizará todos los
valores marcados en pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de
las opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.

Este sistema de control de errores de selección es sencillo de implementar en


cualquier soporte, pero obliga a los redactores de los descompuestos paramétricos a
definir explícitamente las combinaciones de parámetros incorrectas, ya que con
este método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios
paramétricos.

PROCEDIMIENTO DE LECTURA DE DESCRIPCIONES PARAMÉTRICAS.

Recorrer la descripción paramétrica ejecutando los siguientes pasos:


1. Eliminar desde el carácter '#' inclusive hasta el siguiente cambio de línea

exclusive.
2. Cambiar tabuladores (9) por caracteres ' ' (32)

3. Eliminar caracteres ' ' (32) delante y detrás de los caracteres '\'

4. Unir líneas, eliminando el fin de línea, en líneas que comienzan con '\' y

no acaban con '\', que terminan con un operador y en la separación de datos

de una variable matricial.


5. Eliminar todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o

delimitadas (\...\)
6. Eliminar líneas vacías.

7. Leer y evaluar secuencialmente las sentencias de la forma:

Si la sentencia comienza con '\' leer el RÓTULO hasta el siguiente '\', si el RÓTULO
es:

COMENTARIO ó C- Palabra o carácter reservado que identifica el siguiente RÓTULO


entre '\' como comentario a la selección de parámetros.

RESUMEN ó R- Palabra o carácter reservado que identifica el siguiente RÓTULO


entre '\' como el texto de sustitución del resumen del concepto.

Especificación FIEBDC-3/2007 / 439


TEXTO ó T- Palabra o carácter reservado que identifica el siguiente RÓTULO entre
'\' como el texto de sustitución del texto descriptivo del concepto.

PLIEGO ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de las distintas secciones del pliego.

CLAVES ó K- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de los términos claves asociados al
concepto.

COMERCIAL ó F - Palabra o carácter reservado que identifica los siguientes


ROTULOs entre '\' como los textos de sustitución y tarifas de la INFORMACION
comercial del concepto.

Cualquier otro RÓTULO identificará el nombre del siguiente parámetro y los


siguientes ROTULOs entre '\' como los ROTULOs de las opciones de dicho
parámetro.

Si la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.

Si la sentencia comienza con '%:' el resto de la misma debe ser una expresión
numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.

En otro caso si la sentencia contiene el carácter ':' la parte anterior a él es un texto


de sustitución del CÓDIGO de una línea de descomposición y la posterior una
expresión numérica, o dos separadas por ':', indicadoras de el o los rendimientos de
dicha línea de descomposición.

En aquellos casos donde pueda aparecer un carácter ’%’ seguido de un carácter


alfabético que se considere como tal y no como una variable de sustitución, deberá
emplearse ’%%’, para evitar la ambigüedad que se puede producir entre una variable
numérica que deba ser sustituida, una sentencia de medio auxiliar o un texto.

El resto de sentencias deberán ser de asignación de la forma variable/s =


expresión/es

RESUMEN DE TIPOS DE SENTENCIAS


Después de realizado el filtro descrito arriba, cada línea, tira de caracteres acabada
en (ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:
{ \ RÓTULO_parámetro \ { opción_parámetro \ } (13)(10) }

{ variable = expresión (13)(10) }

{ CÓDIGO : rendimiento [ : rendimiento ] (13)(10) }

[ %: ó %%: medios_auxiliares (13)(10) ] % (tanto por cien) %% (tanto por uno)

[ :: expresión_precio (13)(10) ]

[ \ COMENTARIO \ ó \ C \ texto_comentario \ (13)(10) ]

[ \ RESUMEN \ ó \ R \ texto_resumen \ (13)(10) ]

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 440


[ \ TEXTO \ ó \ T \ texto_descriptivo \ (13)(10) ]

[ \ PLIEGO \ ó \ P \ { texto_faceta_pliego \ }(13)(10) ]

[ \ CLAVES \ ó \ K \ { término_clave \ }(13)(10) ]

[ \ COMERCIAL \ ó \ F \ { CÓDIGO_producto_comercial \ tarifa \ } (13)(10) ]

Anexo 3. Descripción paramétrica: API Estándar para descripciones


paramétricas compiladas en DLL
INTRODUCCION
Debido a la necesidad expuesta por los desarrolladores de bases de datos
paramétricas de ampliar las posibilidades del lenguaje de descripción paramétrica,
poder compilar éste por eficiencia y protección de datos y posibilitar la protección
contra copia de bases de datos paramétricas, se establece la siguiente
ESPECIFICACIÓN.

En este documento se definen los componentes necesarios para el desarrollo de


descripciones paramétricas en cualquier lenguaje de aplicaciones para Windows (C,
C++, Pascal, Fortran, etc.) y sin ninguna limitación. Se incluye la DEFINICIÓN de un
API ESTÁNDAR en C, un ejemplo de base de datos en formato DLL de 32 bits
desarrollado en C++ y un ejemplo de aplicación con la implementación del interfaz
con el API en C, definidos ambos en Microsoft Visual C++. Se podría implementar el
interfaz con el API para otros compiladores y lenguajes para acceder a las mismas
DLL.

Es decir; es posible construir una base de datos que cumpla este API utilizando para
ello cualquier lenguaje de programación que permita desarrollar librerías de enlace
dinámico Windows (DLL). Asimismo, es posible construir un programa que lea
cualquier base de datos de estas características utilizando lenguajes de aplicaciones
para Windows.

El juego de caracteres utilizado en los textos devueltos por las funciones del API será
el especificado en el registro ‘~V’.

ARCHIVOS QUE DEBE CONTENER UNA BASE DE DATOS


Una base de datos que se desee distribuir con las definiciones paramétricas
compiladas en DLL, debe contener los siguientes archivos:

base.dll En este archivo, único para cada base de datos y de nombre cualquiera
pero extensión ‘.DLL’, se encuentran las funciones del API que la base de datos
ofrece a las aplicaciones para que éstas obtengan la INFORMACION que contiene la
base.

base.bc3 Archivo o archivos ASCII de la base de datos en formato FIEBDC-3/98.


Los registros '~P' de los conceptos cuya descripción paramétrica se acceda a través
del archivo ‘base.dll’, tendrán el campo ‘DESCRIPCIÓN_PARAMÉTRICA’ vacío. El
CÓDIGO del concepto de este registro deberá coincidir con el CÓDIGO del registro
‘~C’ correspondiente y con el CÓDIGO utilizado en las llamadas a las funciones del
API, incluida(s) la(s) posible(s) almohadillas (‘#’). Ejemplo:

~P|ABCD12$| |

Especificación FIEBDC-3/2007 / 441


El registro '~P' correspondiente al paramétrico global, tendrá el campo
‘DESCRIPCIÓN_PARAMÉTRICA’ vacío, y tendrá un tercer campo con el nombre del
archivo DLL en el que se encuentren las funciones del API de la base. Ejemplo:

~P| | | BASE.DLL |

La DEFINICIÓN paramétrica de los conceptos implementados de esta forma podrá


estar en el mismo archivo que las funciones del API (el archivo ‘base.dll’) o situado
en otro u otros archivos cualesquiera, conforme desee el desarrollador de la base de
datos. Las aplicaciones sólo accederán a las funciones del API incluidas en el
archivo ‘base.dll’, y éstas serán las encargadas de acceder a la INFORMACION en la
forma que el desarrollador de la base implemente.

DEFINICIÓN DEL API: FIEBDC.H


Único archivo que define el ESTÁNDAR. En este archivo se define el API en C, que
las descripciones paramétricas en DLL ofrecen a las aplicaciones. Se recomienda
incluir en las Bases de Datos todas las funciones del API, aunque no se utilicen
todas por la misma. Este interfaz permite definiciones paramétricas de ilimitado
número de parámetros e ilimitadas opciones por parámetro. Se soportan dos modelos
de codificaciones:

1. Un modelo de codificación independiente de parámetros, en el que el CÓDIGO de


un concepto paramétrico es completamente libre y el número de caracteres del
CÓDIGO es independiente del número de parámetros. En este modelo, los códigos
de las familias paramétricas no tienen por qué tener el carácter $.

2. Un modelo dependiente de los mismos. Es el modelo que definía FIEBDC-3/95 y


en el que el CÓDIGO de un concepto paramétrico debe tener un símbolo ‘$’ en su
séptima posición y en el que se asigna de la 'a' a la 'z' las opciones 0 a 25 de cada
parámetro, ampliándose en esta VERSION con los rangos 'A' a 'Z' y '0' a '9' para
que el número de opciones por parámetro en este modelo de codificación pase a
62 (de 0 a 61).

Para que los programas puedan determinar si una base de datos responde a uno u
otro modelo, se ha definido la función BdcCodificacion(), que se especifica más
adelante y que indica si el sistema de codificación usado en la base de datos es
dependiente o independiente.

Si se adopta el primer modelo, no es posible averiguar ‘a priori’, a partir de un


CÓDIGO ‘ABCDEFGHIJ’ de concepto, si éste es un derivado paramétrico ni de que
concepto paramétrico procede o con qué valores de sus parámetros. Por ello, es
establece el siguiente criterio de búsqueda:

1. Si el concepto existe con este CÓDIGO en la base, se escogerá dicho concepto.

2. En caso de no existir, se intentará localizarlo en la base de datos como


perteneciente a un concepto paramétrico ‘al estilo’ FIEBDC-3/95. En el ejemplo,
se intentará buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los parámetros
‘GHIJ’ (que implica pasarle a sus cuatro parámetros valores ‘31’, ‘32’, ‘33’ y ‘34’
respectivamente).

3. En caso de no existir, se intentará localizarlo en la DLL. Si ésta posee un modelo


de codificación dependiente, se utilizará el mismo criterio que en el punto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 442


anterior: en el ejemplo, buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los
parámetros ‘GHIJ’. Si la base posee un modelo independiente, se utilizará la
función ‘BdcDecodifica()’, tal como se especifica más adelante.

4. Si no se cumplen ninguna de las condiciones anteriores, se supone que el


concepto no existe en la base.

Vea en el archivo ‘fiebdc.h’ adjuntado la definición del API.

ESPECIFICACIÓN DE LAS FUNCIONES DEL API


1. FUNCIONES GENERALES

LONG EXPORTA BdcCodificacion (

VOID

);

Propósito

Indica si la base de datos utiliza un modelo de codificación dependiente o


independiente del número y valor de los parámetros.

Valor devuelto

Devolverá ‘0’ si la codificación sigue un modelo dependiente (al ‘estilo’ FIEBDC-


3/95), y ‘1’ si sigue un modelo independiente.

LONG EXPORTA BdcTipoPliego (

VOID

);

Propósito

Indica qué tipo o tipos de Pliegos de Condiciones están implementados en la base.


Dichos modelos se especifican en el apartado ‘REGISTROS TIPO PLIEGOS’ de las
especificaciones del formato.

Valor devuelto

Devolverá ‘0’ si no está implementado ningún tipo de pliego.

Devolverá ‘1’ si está implementado el modelo uno de textos de pliegos. Es este caso,
se utilizará la función BdcPliego() para obtener los textos de los pliegos.

Devolverá ‘2’ si está implementado el modelo dos de textos de pliegos. En este caso,
se utilizarán las funciones BdcCodigoParrafo() y BdcTextoParrafo() para obtener los
textos de los pliegos.

Devolverá ‘3’ si están implementados tanto el modelo uno como el modelo dos.

LPCSTR EXPORTA BdcFecha (

VOID

Especificación FIEBDC-3/2007 / 443


);

Propósito

Obtener la fecha de la Base de Datos.

Valor devuelto

Devuelve la fecha de la Base de Datos en formato DDMMAAAA, donde DD representa


al día con dos dígitos, MM el mes y AAAA el año.

La propia función es responsable de asignar memoria al puntero. En caso de error, la


función devuelve NULL. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

2. FUNCIONES REFERENTES AL PARAM ÉTRICO GLOBAL

2.1. Accesibles en cualquier momento

2.1.1. Obtención de sus parámetros

LONG EXPORTA BdcGloParNumero (

VOID

);

Propósito

Obtener el número de parámetros de concepto paramétrico global.

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve


-1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcGloError().

LONG EXPORTA BdcGloOpcNumero (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de


producirse un error, devuelve –1. Para obtener más INFORMACION sobre

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 444


el error producido, llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloParRotulo (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloOpcRotulo (

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Propósito

Obtiene el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’
el número de opciones que posee el parámetro ‘par’ del concepto
paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcGloError().

Especificación FIEBDC-3/2007 / 445


2.1.2. Mensajes / CODIGOs de error

LONG EXPORTA BdcGloError (

LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene el tipo de error producido. Una vez leído, se inicializa el CÓDIGO


de error.

Parámetros

err: Puntero a un puntero constante ‘far’ a una cadena de caracteres.


En él se almacena el mensaje de error referente al error
producido. La función es responsable de asignar memoria al
puntero. Si no existe un mensaje definido para el error existente,
‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el CÓDIGO de error producido. Vea al final el apartado


‘CODIGOs de los mensajes de error’ para más INFORMACION.

2.1.3. Asignación de opciones a los parámetros

BOOL EXPORTA BdcGloCalcula (

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Asigna los valores de los parámetros del concepto paramétrico global..

Parámetros

opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por
cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, devuelve ‘-1’.


Para obtener más INFORMACION sobre el error producido, llame a la
función BdcGloError().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 446


3. FUNCIONES REFERENTES AL RESTO DE PARAM ÉTRICOS

3.1. Accesibles en cualquier momento

3.1.1. Lectura de un concepto paramétrico

HANDLE EXPORTA BdcLee (

LPCSTR cod // CÓDIGO del concepto

);

Propósito

Lee el concepto paramétrico identificado por ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto paramétrico a leer. Si se utiliza un modelo de
codificación dependiente, se asume que dicho CÓDIGO tenga 7
caracteres y que el séptimo sea ‘$’. Dentro del CÓDIGO, los
caracteres pueden ser cualesquiera salvo el 0x00 (que indica el
final del CÓDIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe el paramétrico, la función devuelve
cero.

3.1.2. Lectura de un concepto paramétrico a partir del CÓDIGO completo del


derivado

HANDLE EXPORTA BdcDecodifica (

LPCSTR cod, // CÓDIGO completo del derivado paramétrico

LPLONG opcl // puntero al espacio de memoria a

); // rellenar con las opciones

Propósito

Lee el concepto paramétrico al que pertenece el concepto de CÓDIGO


‘cod’. El HANDLE y las opciones ‘opcl’ devueltas se pueden utilizar
directamente en una llamada a BdcCalcula().

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto del que se desea obtener el concepto paramétrico a la
que pertenece. Dentro del CÓDIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CÓDIGO).

opcl: Puntero a un vector (array) de LONGs en el que la función

Especificación FIEBDC-3/2007 / 447


devolverá las opciones a las que corresponda el derivado
paramétrico. El array debe estar previamente dimensionado con al
menos el número de parámetros del concepto. Las opciones se
numeran empezando por cero.

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe ningún concepto paramétrico del
que el concepto ‘cod’ es derivado, la función devuelve cero.

LPCSTR EXPORTA BdcFamilia (

LPCSTR cod) // CÓDIGO completo del derivado paramétrico

Propósito

Lee el código del concepto paramétrico al que pertenece el concepto de


CÓDIGO ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto del que se desea obtener el concepto paramétrico al
que pertenece. Dentro del CÓDIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CÓDIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna su código como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero.. En caso de error, o si no
existe ningún concepto paramétrico del que el concepto ‘cod’ es derivado,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

3.1.3. Mensajes / CODIGOs de error

LONG EXPORTA BdcError (

HANDLE h, // identificador del concepto

LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene tipo de error producido.

Parámetros

h: Identificador (HANDLE) del concepto, que debe ser obtenido en una


llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 448


err: Puntero a un puntero constante ‘far’ a una cadena de
caracteres. En él se almacena el mensaje de error referente al
error producido. La función es responsable de asignar memoria al
puntero. Si no existe un mensaje definido para el error existente,
‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el CÓDIGO de error producido. Vea al final el apartado


‘CODIGOs de los mensajes de error’ para más INFORMACION.

3.2. Accesibles después de BdcLee

3.2.1. Obtención de sus parámetros

LONG EXPORTA BdcParNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de parámetros de concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve


-1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

LONG EXPORTA BdcOpcNumero (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Especificación FIEBDC-3/2007 / 449


Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de


producirse un error, la función devuelve -1. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcParRotulo (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcOpcRotulo (

HANDLE h, // identificador del concepto

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Propósito

Obtiene rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 450


opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’
el número de opciones que posee el parámetro ‘par’ del concepto.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError(). En caso de referirse a
ámbitos territoriales y a divisas, véanse los anexos 5 y 6.

3.2.2. Obtención de un comentario

LPCSTR EXPORTA BdcComentario (

HANDLE h, // identificador del concepto

);

Propósito

Obtiene un texto de comentario del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el comentario del concepto, como puntero constante ‘far’ a una


cadena de caracteres. La propia función es responsable de asignar
memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcError().

3.2.3. Asignación de opciones de los parámetros y validación o cálculo del


derivado

BOOL EXPORTA BdcValida (

HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Averigua si una determinada combinación paramétrica es correcta o no.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Especificación FIEBDC-3/2007 / 451


opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por
cero.

Valor devuelto

Devuelve ‘0’ si la combinación es correcta. En caso contrario, devuelve ‘-


1’. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

BOOL EXPORTA BdcCalcula (

HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Calcula los datos correspondientes a un derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por
cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, o de que la


combinación no sea correcta, devuelve ‘-1’. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LONG EXPORTA BdcValidos (

HANDLE h, // identificador del concepto

LPBYTE *opcl, // lista de opciones de los parámetros de todos los


derivados válidos

);

Propósito

Obtiene las opciones de cada parámetro de todos los derivados


paramétricos válidos de la familia paramétrica. Si no se desea
implementar esta función en una determinada familia, la función
deberá devolver ‘0’. Está pensada para aquellas familias que posean un
número elevado de combinaciones posibles, en las que el averiguar
cuales de ellas son válidas mediante sucesivas llamadas a las funciones
BdcCalcula() o BdcValida() es muy costoso en tiempo. En una sola llamada

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 452


a esta función es posible, en estos casos, obtener todas las
combinaciones válidas.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a una matriz (array) bidimensional de BYTEs a rellenar por


la función, en el que cada columna corresponde a un derivado
paramétrico válido, y cada fila corresponde a los valores de cada uno
de los parámetros. La matriz se devuelve al estilo de ‘C’; es decir,
por columnas. Las opciones se numeran empezando por cero. La
propia función es responsable de asignar memoria al puntero. La
memoria asignada en bytes será el número de combinaciones
válidas multiplicado por el número de parámetros.

Valor devuelto

Devuelve el número de derivados paramétricos válidos. En caso de que


dicha información no esté disponible, devuelve ‘0’. En caso de error,
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido,
llame a la función BdcError().

Ordenación

Las combinaciones válidas a devolver se ordenarán teniendo en cuesta


que el primer parámetro tiene más precedencia que el segundo, éste que
el tercero, y así sucesivamente.

Ejemplo

Si una familia paramétrica tiene 3 parámetros, con 9, 10 y 11 opciones


por parámetro respectivamente, el número total de combinaciones
posibles es 9x10x11 = 990. Si son válidas sólo las siguientes cuatro
(escritos en el orden especificado en el párrafo anterior):

1. Valores ‘0’, ‘5’, y ‘9’ de los parámetros uno al tres, respectivamente.

2. Valores ‘7’, ‘6’ y ‘5’ de los parámetros uno al tres, respectivamente.

3. Valores ‘8’, ‘2’ y ‘4’ de los parámetros uno al tres, respectivamente.

4. Valores ‘8’, ‘2’ y ‘10’ de los parámetros uno al tres, respectivamente.

Entonces la función devolverá los 4x3=12 bytes siguientes: 0, 5, 9, 7, 6, 5,


8, 2, 4, 8, 2 y 10.

3.2.4. Liberación de memoria

LONG EXPORTA BdcInValidos (

HANDLE h, // identificador del concepto

LPBYTE *opcl, // lista de opciones de los parámetros de todos los

Especificación FIEBDC-3/2007 / 453


derivados inválidos

);

Con el mismo propósito y parámetros que BdcValidos.

Esta función se implementará en lugar de aquella cuando no exista


BdcValidos para un concepto paramétrico y viceversa.

3.2.4. Liberación de memoria

BOOL EXPORTA BdcCierra (

HANDLE h // identificador del concepto

);

Propósito

Cierra el concepto paramétrico y libera la memoria asignada.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve ‘0’ si realiza la operación correctamente. En caso de error, la


función devuelve ‘-1’. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

3.3. Accesibles después de BdcCalcula

3.3.1. Obtención del derivado paramétrico

LONG EXPORTA BdcDesNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de conceptos en los que se descompone el derivado


paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de elementos de su descomposición. Un valor de


cero indicará que el concepto no tiene descomposición. Es posible que un

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 454


mismo concepto paramétrico posea derivados simples y compuestos. En
caso de error, la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcDesCodigo (

HANDLE h, // identificador del concepto

LONG des // número del elemento de la descomposición

);

Propósito

Obtiene el CÓDIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

Valor devuelto

Devuelve el CÓDIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcFactor (

HANDLE h, // identificador del concepto

LONG des, // número del elemento de la


descomposición

double FAR *factor // factor a obtener

);

Propósito

Obtiene el factor de rendimiento del elemento número 'des' en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

Especificación FIEBDC-3/2007 / 455


*factor: Puntero en el que devolver el factor deseado, por defecto 1. El
factor puede ser positivo, cero o negativo.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, el factor se


asigna a cero y la función devuelve '-1'. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcRendimiento (

HANDLE h, // identificador del concepto

LONG des, // número del elemento de la


descomposición

double FAR *ren // rendimiento a obtener

);

Propósito

Obtiene el rendimiento del elemento número ‘des’ en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

*ren: Puntero en el que devolver el rendimiento deseado. El


rendimiento puede ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el


rendimiento se asigna a cero y la función devuelve ‘-1’. Para obtener
más INFORMACION sobre el error producido, llame a la función BdcError
().

BOOL EXPORTA BdcPrecio (

HANDLE h, // identificador del concepto

double FAR *pre // precio unitario a devolver

);

Propósito

Obtiene el precio unitario en el caso de que el derivado paramétrico sea


un simple. Es posible que un mismo concepto paramétrico tenga como
derivados tanto simples como compuestos.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 456


Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

*pre: Puntero en el que devolver el precio unitario. Dicho precio puede


ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el precio se


asigna a cero y la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodigo (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el CÓDIGO del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el CÓDIGO del concepto, como puntero constante ‘far’ a una


cadena de caracteres. Si se ha calculado un derivado paramétrico (se ha
llamado a BdcCalcula), este CÓDIGO será el del derivado paramétrico. En
caso contrario, será el CÓDIGO del concepto paramétrico. La propia
función es responsable de asignar memoria al puntero. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcUnidad (

HANDLE h // identificador del concepto

);

Propósito

Obtiene la unidad de medida del derivado paramétrico. Esta función


permite que un concepto paramétrico pueda generar elementos
derivados con distintas unidades de medición. Para que dicha función
actúe, el registro ~C debe contener el carácter especial ‘*’ dentro del
campo unidad de medida. Dicho carácter indica que la unidad de medida
de los conceptos derivados los debe proporcionar el API. Si el redactor de
la BD desea que la unidad de medida sea un valor a escoger por parte del
usuario, deberá además añadirse la unidad de medida como una

Especificación FIEBDC-3/2007 / 457


propiedad más del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto correspondiente a la unidad de medida del derivado


paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido un texto resumido, la función devuelve la cadena vacía “”.
En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcResumen (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto resumido del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto resumido del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un
texto resumido, la función devuelve la cadena vacía “”. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTexto (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto completo de descripción del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 458


Valor devuelto

Devuelve el texto completo de descripción del derivado paramétrico, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un
texto completo de descripción, la función devuelve la cadena vacía “”. En
caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

VOID EXPORTA BdcTipoDescripcion (

LONG tipo // tipo de descripción

);

Propósito

Indica qué tipo de descripción se va a obtener de un concepto derivado.

Parámetros

Tipo: Se refiere a las diferentes descripciones (obtenidas con


BdcResumen y BdcTexto) que puede tener un concepto derivado en
función de los diferentes contenidos de que trate la base de datos.

Valor '0': Descripción por defecto de un derivado paramétrico.

Valor '1': Descripción de un derivado paramétrico que contiene


insertados uno o varios códigos de conceptos que intervienen en
su descomposición. Dichos códigos aparecen indicados entre
dólares ($). Esta opción sirve para que los programas puedan
particularizar la descripción de un concepto derivado cuando se
han proporcionado productos comerciales asociados a sus
componentes (con BdcComercNumero y BdcComercCodigo, o con
el registro ~O).

Ejemplo: BdcTexto del concepto derivado E612235K.

Devolución de BdcTexto con valor 0 para BdcTipoDescripcion: Inodoro con


tapa.

Devolución de BdcTexto con valor 1 para BdcTipoDescripcion: Inodoro


$B1234567$ con tapa $B7654321$.

LPCSTR EXPORTA BdcPliego (

HANDLE h, // identificador del concepto

LONG formato, // identificador del formato

LONG tipo, // especifica si el pliego a obtener es de la familia o del


derivado

LPCSTR sección, // código de la sección del pliego

Especificación FIEBDC-3/2007 / 459


LPCSTR ámbito // abreviatura del ámbito

);

Propósito

Obtiene el texto del pliego, según el modelo uno.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

formato: Identificador del formato de texto. Se definen, por el momento,


los siguientes formatos: ‘BDCFMT_ASCII’ (si se desea obtener el
pliego en formato ASCII), ’BDCFMT_ANSI’ (si se desea obtener el
pliego en formato ANSI), ‘BDCFMT_RTF’ (si se desea obtener el
pliego en formato RTF) y ‘BDCFMT_HTM’ (si se desea obtener el
pliego en formato HTM).

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Puede tomar como valor el código de la sección del pliego cuyo
texto se desea obtener, en cuyo caso deberá ser una de las
secciones especificadas en el registro ~L, según se indica en el
apartado ‘REGISTROS TIPO PLIEGOS’ de la especificaciones del
formato. Si no existen secciones definidas, el valor de este
parámetro no es utilizado. Si por el contrario toma el valor NULL,
la función devolverá los códigos de las secciones del pliego para
los que el concepto posea texto del pliego, separados por el
separador de subcampos ('\').

ámbito: Ámbito del cual se desea obtener el texto del pliego. Corresponde
a uno de los campos ‘ABREV_AMBITO’ especificados en el registro
~W, según se indica en el apartado ‘REGISTRO TIPO ÁMBITO
GEOGRÁFICO’ de las especificaciones del formato. Si no existen
ámbitos definidos (no existe un registro ~W), el valor de este
parámetro es ignorado. En ese caso, es posible que el ámbito sea
un parámetro global de la base.

Valor devuelto

Si el parámetro sección contiene el código de la sección del pliego cuyo


texto se desea obtener, la función devuelve el texto del pliego del derivado
paramétrico en el formato solicitado, como puntero constante ‘far’ a una
cadena de caracteres. Si no existe definido un texto de pliego, la función
devuelve la cadena vacía “”.

Cuando el parámetro sección es NULL, la función devuelve los rótulos de


los pliegos asociados al concepto paramétrico en el formato {rótulo\}, si
no hubiera rótulos asociados al concepto la función devuelve "".

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 460


La propia función es responsable de asignar memoria al puntero. En
caso de error (por ejemplo formato no soportado por la BDC), la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodParrafo (

HANDLE h, // identificador del concepto

LONG tipo, // especifica si el pliego a obtener es de la


familia o del derivado

LPCSTR sección, // código de la sección del pliego

LPCSTR ámbito // abreviatura del ámbito

);

Propósito

Obtiene los códigos de los párrafos de pliego, según el modelo dos.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Código de la sección del pliego cuyos códigos de párrafo se desea


obtener. Deberá ser una de las secciones especificadas en el
registro ~L, según se indica en el apartado ‘REGISTROS TIPO
PLIEGOS’ de la especificaciones del formato. Si no existen
secciones definidas, el valor de este parámetro no es utilizado.

ámbito: Ámbito del cual se desea obtener los códigos de párrafo.


Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados
en el registro ~W, según se indica en el apartado ‘REGISTRO
TIPO ÁMBITO GEOGRÁFICO’ de las especificaciones del formato.
Si no existen ámbitos definidos (no existe un registro ~W), el
valor de este parámetro es ignorado. En ese caso, es posible que
el ámbito sea un parámetro global de la base.

Valor devuelto

Devuelve un texto con los códigos de párrafo del pliego del derivado
paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido ningún código de párrafo, la función devuelve la cadena
vacía “”. En caso de error (por ejemplo ámbito no soportado por la BDC), la
función devuelve NULL. Para obtener más INFORMACION sobre el error

Especificación FIEBDC-3/2007 / 461


producido, llame a la función BdcError(). Los códigos irán separados con el
separador de subcampos habitual, es decir, el texto devuelto tendrá la
sintaxis

{ CÓDIGO_PARRAFO \ }

LPCSTR EXPORTA BdcTexParrafo (

LONG formato // identificador del formato

LPCSTR cod_parrafo // código del párrafo del pliego

);

Propósito

Obtiene el texto del pliego del derivado paramétrico correspondiente al


código de párrafo ‘cod_parrafo’, según el modelo dos. El código de párrafo
se obtiene mediante una llamada a la función BdcCodParrafo.

Parámetros

formato: Identificador del formato de texto. Se definen, por el


momento, los siguientes formatos: ‘BDCFMT_ASCII’ (si se
desea obtener el pliego en formato ASCII), ‘BDCFMT_RTF’ (si
se desea obtener el pliego en formato RTF) y
‘BDCFMT_HTM’ (si se desea obtener el pliego en formato
HTM).

cod_parrafo Código del párrafo del pliego cuyo texto se desea obtener.

Valor devuelto

Devuelve el texto del párrafo en el formato solicitado, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Esta memoria se liberará en
la siguiente llamada a esta función dentro del mismo proceso. Si no
existe definido un texto de pliego con este código de párrafo, la función
devuelve la cadena vacía “”. En caso de error (por ejemplo formato no
soportado por la BDC), la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcClaves (

HANDLE h // identificador del concepto

);

Propósito

Obtiene las claves de tesauro del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 462


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve las claves de tesauro del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres, con el mismo formato que el
registro ‘~A’, es decir, ‘{CLAVE_TESAURO\}’. La propia función es
responsable de asignar memoria al puntero. Si no existen definidas
claves del tesauro, la función devuelve la cadena vacía “”. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTipo (

HANDLE h, // identificador del concepto

);

Propósito

Obtener el tipo del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el tipo del concepto, como puntero constante 'far' a una cadena
de caracteres. Si se ha calculado un derivado paramétrico (se ha llamado
a la función BdcCalcula) este tipo será el del derivado paramétrico. En
caso contrario, será el tipo del concepto paramétrico. La propia función
es responsable de asignar memoria al puntero. En caso de error, la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError(). Corresponde al campo TIPO del
registro ~C.

LONG EXPORTA BdcComercNumero(

HANDLE h // identificador del concepto

LPCSTR codigo_raiz_BD // identificador de la entidad que


elabora la BD

);

Propósito

Obtener el número de conceptos vinculados a un concepto que pertenece


a codigo_raiz_BD y empleado por ésta en su sistema de clasificación por
codificación.

Especificación FIEBDC-3/2007 / 463


Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

codigo_raiz_BD: Se refiere a la identificación del CODIGO de la entidad


que elabora la BD. Este CODIGO debe ser facilitado por la
entidad que elabora la BD, para evitar ambigüedades. Se
recomienda que éste sea el propio CIF de la entidad.

Valor devuelto

Devuelve el número de conceptos vinculados. Si se ha calculado un


derivado paramétrico (se ha llamado a la función BdcCalcula) este
número será el del derivado paramétrico. En caso contrario, será el
número del concepto paramétrico. Un valor de cero significa que no tiene
conceptos vinculados. En caso de error la función devuelve '-1' . Para
obtener más INFORMACIÓN sobre el error producido, llame a la función
BdcError().

BOOL EXPORTA BdcComercCodigo(

HANDLE h // identificador del concepto

LONG comerc // número del concepto vinculado

LPLCSTR *Codigo_archivo // nombre de archivo a devolver

LPLCSTR *Codigo_Entidad // identificación del código de la


entidad a la que se asocia

// la información a devolver

LPLCSTR *Codigo_Concepto // concepto que pertenece a


Codigo_Entidad a devolver

);

Propósito

Obtener el código de archivo que indica el lugar donde se encuentra la


información referente a codigo_entidad#codigo_concepto, o bien el
codigo_entidad y el codigo_concepto que se encuentra en la misma BD.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

comerc: Número del concepto vinculado. Los conceptos vinculados se


numeran empezando por cero.

codigo_archivo: Se refiere al nombre del archivo que, de existir, indica el


lugar donde se encuentra la información referente a
codigo_entidad#código_concepto. Si el valor es nulo los
campos código entidad y código concepto deberán existir.
La propia función es responsable de asignar memoria al

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 464


puntero.

codigo_entidad: Se refiere a la identificación del CODIGO de la entidad a


la que se le asocia INFORMACION. Este CODIGO debe ser
facilitado por la entidad que elabora la BD, de acuerdo con
su sistema de clasificación, para evitar ambigüedades. Se
recomienda que éste sea el propio CIF de la entidad. La
propia función es responsable de asignar memoria al
puntero.

codigo_concepto: Se refiere a un concepto que pertenece a


CODIGO_ENTIDAD, y empleado por la entidad que elabora
la BD. Cuando CODIGO_CONCEPTO se refiera a un
producto comercial, dicho CODIGO deberá ser facilitado
por el fabricante, y no podrá coincidir nunca con la
designación de CODIGO_RAIZ_BD, CODIGO_ENTIDAD o
CODIGO_CONCEPTO, cuando éste se refiere a un
concepto genérico. La propia función es responsable de
asignar memoria al puntero.

Al tener dicho producto comercial un tratamiento de CONCEPTO, éste


puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica,
etc.). Para poder utilizar los registros mencionados, el código
identificador del concepto será CODIGO_ENTIDAD #
CODIGO_CONCEPTO.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, la función


devuelve '-1'. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

LONG EXPORTA BdcDocNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtener el número de archivos asociados a un concepto.

Parámetros

h: Identificador (HANDLE) del concepto.

Valor devuelto

Devuelve el número de archivos asociados. Un valor de cero significa que


no tiene archivos asociados. En caso de error la función devuelve '-1' .
Para obtener más INFORMACIÓN sobre el error producido, llame a la
función BdcError()

Especificación FIEBDC-3/2007 / 465


BOOL EXPORTA BdcDocCodigo (

HANDLE h, // identificador del concepto.

LONG num, // número del archivo asociado.

LONG * tipo // clasificación del tipo de información del


archivo.

LPCSTR * archivo, // nombre del archivo que contiene


información del concepto.

LPCSTR * descripción // descripción de la información que


contiene el archivo.

);

Propósito

Obtener el archivo asociado a un concepto así como su clasificación


temática y su descripción asociada.

Parámetros

h: Identificador (HANDLE) del concepto.

num: Número del archivo asociado al concepto. Se numeran empezando


por cero.

tipo: Devuelve el código de uno de los tipos enumerados en el registro ~F.

archivo: Devuelve el nombre del archivo con extensión que contiene


información del concepto. Las extensiones permitidas son las
que se especifican en el registro ~F. En el caso que se devuelvan
varios archivos, el primero de los archivos es el principal y el
resto son vinculados. En este caso el formato del string sería el
siguiente: “archivo 1 | ... | archivo n | ”

descripción: Devuelve una breve descripción de la información contenida


en el archivo. devuelve NULL si no hay ningún texto
descriptivo asociado.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, la función


devuelve '-1'. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

4. M ENSAJES DE ERROR

Los CODIGOs de error se almacenan en un LONG (entero de 32 bits) de manera que


cada error corresponde a un bit. De esta forma, es posible definir hasta 32 CODIGOs
de error que pueden producirse de forma aislada o conjunta. Las llamadas a las
funciones BdcGloError() y BdcError() eliminan los CODIGOs de error producidos
anteriormente.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 466


Por ejemplo, para saber si un determinado error se ha producido con el concepto
‘Concepto’, se debe utilizar la sintaxis:

const char *Mensaje;

LONG cod_err = BdcError ((HANDLE)Concepto, &Mensaje);

if (cod_err & BDCERR_BASE_DATOS) {

// Se ha producido el error ‘BDCERR_BASE_DATOS’

...

4.1. CODIGOs de los mensajes de error


BDCERR_CORRECTO No hay error.

BDCERR_BASE_DATOS Existe un mensaje de error. Es el caso en el

que la DEFINICIÓN paramétrica se indica

una combinación inválida y se devuelve un

mensaje de error explicativo.

BDCERR_PARAMETRO Se pasó a BdcCalcula o BdcGloCalcula un

parámetro inexistente.

BDCERR_OPCION Se pasó a BdcCalcula o BdcGloCalcula una

opción inexistente.

BDCERR_MAX_OPCIONES Se definieron más de 62 opciones en un

determinado parámetro.

BDCERR_NO_LEIDO Se intentó utilizar BdcCalcula() antes que

BdcLee().

BDCERR_NO_CALCULADO Se intentó acceder a datos de un derivado

paramétrico antes de utilizar BdcCalcula().

BDCERR_DESCOMPOSICION Se intentó acceder a un elemento de la

descomposición inexistente.

BDCERR_SIN_CODIGO No existe CODIGO definido.

BDCERR_SIN_MEMORIA Memoria insuficiente.

BDCERR_CONCEPTO_NULO Se pasó un HANDLE nulo.

BDCERR_FMT_NO_SOPORTADO El formato de texto solicitado no está

soportado por la BDC

BDCERR_NO_COMBINACION: A la llamada BdcValida o BdcCalcula se le

pasó una combinación inexistente.

Especificación FIEBDC-3/2007 / 467


BDCERR_NO_BANCO_PRECIOS: No existe ningún Banco de Precios.

BDCERR_PARAMETRO_INCORRECTO “El programa pidió un parámetro

incorrecto”

EJEM PLOS

1. BASE DE DATOS EJEMPLO: BASE.DLL

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto los
archivos que constituyen la base como los fuentes necesarios para construirla
(compilarla).

El ejemplo construido posee las siguientes características (no todas las bases que se
realicen conforme a este formato deben tener estas mismas características):

1. Se ha utilizado un modelo de codificación independiente de los parámetros.

2. Se ha utilizado el modelo uno de textos de pliegos.

3. Existe un paramétrico global, si bien el valor de su único parámetro sólo es


utilizado en el concepto ‘SBRG.1$’.

4. Existe un concepto (‘Esp$’) que no responde a los criterios de FIEBDC-3/95: posee


más de cuatro parámetros y el código de la familia sólo tiene 4 caracteres.

5. Todos los conceptos paramétricos poseen un CODIGO terminado en ‘$’, si bien el


formato no lo exige.

6. Existe un concepto (‘SBRG.1$’) cuyos derivados poseen un código que no responde


a los criterios de FIEBDC-3/95. Para la asignación de código se ha seguido la
técnica de definir una tabla de sinónimos: así, el concepto que resulta de escoger
el primer valor del único parámetro que posee, en lugar de poseer el código
‘SBRG.1a’ posee el código ‘SBRG.1_18’.

7. Los textos de los pliegos sólo están definidos en formato ASCII y para los
derivados paramétricos. No están divididos ni en secciones (facetas) ni en
ámbitos.

1.1. Archivos para la distribución de la Base de Datos.

Para distribuir la base datos que se construyera con este ejemplo, se deberían
proporcionar los siguientes archivos:

base.dll DLL que contiene las descripciones paramétricas y el interfaz


ESTÁNDAR con aplicaciones (API).

base.bc3 Archivo ASCII de la base de datos en formato FIEBDC-3/98. En el


ejemplo, la base incluye en esta DLL el paramétrico global de la base, así como
las descripciones paramétricas de los conceptos “ABPH.1$”, “SBRG.1$”,
“EADR.3$” y “Esp$”, por lo que al menos debe contar con los siguientes registros:

~P| | | BASE.DLL |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 468


~P| ABPH.1$ | |

~P| SBRG.1$ | |

~P| EADR.3$ | |

~P| Esp$ | |

1.2. Archivos necesarios para la CONSTRUCCIÓN de la Base de Datos.

Este ejemplo está preparado para compilarse con Microsoft Visual C++ VERSION
2.2 o posterior como DLL de 32 bits. Sin apenas modificaciones, sería posible
compilarlo como DLL de 16 bits o utilizar el compilador Borland C++.

Para construir la DLL, son necesarios los siguientes archivos:

fiebdc.h Archivo que define el formato.

base.h DEFINICIÓN de variables y defines útiles para la definición de las


descripciones paramétricas.

interfaz.cpp Implementación de las funciones del API.

aplicat.cpp Implementación de las funciones de la descripción paramétrica.

base.cpp Implementación de las descripciones paramétricas de la base de


datos en formato C++. Es la única parte que escribirían los redactores de las
bases de datos. Se ha utilizado una sintaxis similar a la descripción
paramétrica del formato FIEBDC-3/95, para facilitar así el intercambio entre
ambos formatos.

base.def DEFINICIÓN de las funciones de exportación del API.

2. APLICACIÓN EJEMPLO: PROGRAMA.EXE

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto el
ejecutable (‘Programa.EXE’) como los fuentes necesarios para construirlo
(compilarlo).

Esta sencilla aplicación, lee los conceptos que se incluyen en el propio fuente de la
base BASE.DLL (en una aplicación real, los conceptos se definen en los registros ~P
de base.bc3), y escribe en el archivo 'SALIDA.TXT' los rótulos de todos sus
parámetros así como todos los datos de todas sus combinaciones paramétricas.

Los fuentes son fácilmente modificables para poder probar con el programa cualquier
base de datos que utilice paramétricos compilados en DLL de acuerdo con el API
establecido en este documento.

2.1. Archivos necesarios para la CONSTRUCCIÓN del programa ejemplo.

Este ejemplo está preparado para compilarse con Microsoft Visual C++ VERSION
2.2 o posterior como aplicación Windows 95 de 32 bits en modo consola. Sin
apenas modificaciones, sería posible compilarlo como aplicación de 16 bits o
utilizar el compilador Borland C++.

Especificación FIEBDC-3/2007 / 469


Para construir la aplicación, son necesarios los siguientes archivos:
fiebdc.h Archivo que define el formato.

program.h Declaración de variables y funciones.

program0.c Funciones auxiliares de apertura y cierre de la base de datos y

tratamiento de los mensajes de error.

program.c Programa ejemplo.

Anexo 4. Clasificación en tipos de los Conceptos


Tipos 0, 1, 2 y 3.

Estos tipos corresponden a los vigentes en los formatos FIEBDC-3/95 y FIEBDC-3/98.


-0 Sin clasificar

-1 Mano de obra

-2 Maquinaria

-3 Materiales

Tipos obtenidos de los índices y fórmulas polinómicas de revisión de precios del


BOE y de la CNC.

Esta clasificación proviene del BOE (Boletín Oficial del Estado: www.boe.es) y de la
CNC (Confederación Nacional de la Construcción: www.cnc.es), que la utilizan para
fijar los índices de variación de precios mediante sus respectivas fórmulas
polinómicas.
-H Mano de obra

- MC Cemento

- MCr Cerámicas

- MM Maderas

- MS Siderúrgicos

- ME Energía

- MCu Cobre

- Mal Aluminio

- ML Ligantes

A los anteriores se añaden los siguientes


-M Otros materiales

-Q Maquinaria

-% Medios auxiliares

donde,
- H, se refiere al tipo 1 actual.

- MC, MCr, MM, MS, ME, MCu, Mal, ML y M, se refieren al tipo 3 actual. Dicha

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 470


clasificación de materiales se corresponde con la de los índices de revisión de precios

de las obras oficiales, a los que se añade el tipo M para aquellos materiales que no se

puedan asociar a ninguno de los anteriores.

- Q, se refiere al tipo 2 actual.

- %, se refiere a un nuevo tipo que se corresponde con los medios auxiliares que

pueden aparecer en una justificación de precios.

Tipos obtenidos de la Asociación de Redactores de Bases de Datos de la


Construcción.

Estos tipos sirven para desarrollar el tipo 0.


- EA Elemento auxiliar

- EU Elemento unitario

- EC Elemento complejo

- EF Elemento funcional

- OB Obra

- PA Partida Alzada

- PU Presupuesto Unitario

donde,

Elemento auxiliar. Elemento constructivo formado por una combinación de


elementos básicos ( mano de obra, materiales y maquinaria ) que intervienen en la
formación de una unidad de obra.

Ejemplos: Hormigón H-250 de consistencia plástica elaborado en obra; Acero AEH-


400 S elaborado en obra; etc.

Elemento unitario. Elemento constructivo formado por un conjunto de elementos


básicos y/o auxiliares que configuran una unidad de obra y que lo realiza un
mismo grupo de especialistas.

Ejemplos: Tabique de ladrillos cerámicos huecos sencillos de 25x12x4 cm,


tomados con mortero de cemento de dosificación 1:6; Hormigón H-250 en
soportes; etc.

Elemento complejo. Elemento constructivo formado por un conjunto de elementos


básicos, auxiliares y/o unitarios que constituye un conjunto constructivo y que lo
realiza uno o varios grupos de especialistas.

Ejemplos: Hormigón H-250 armado con 120 kg de acero AEH-400 S y encofrado


con placas metálicas, en soportes…; Cerramiento de fachada formado por dos
hojas cerámicas con aislamiento en cámara de aire…; etc.

Elemento funcional. Elemento constructivo formado por un conjunto de elementos


básicos, auxiliares, unitarios y/o complejos que constituye un conjunto
constructivo con una función completa dentro de la obra.

Especificación FIEBDC-3/2007 / 471


Ejemplos: Estructura de hormigón armado; Cocina formada por…; etc.

Obra. Elemento constructivo formado por un conjunto de elementos funcionales,


complejos, unitarios, auxiliares y/o simples que configuran la totalidad de
elementos que constituyen una construcción.

Ejemplos: Rehabilitación de fachada…; Edificio de viviendas plurifamiliar…; etc.

Partida Alzada. Unidad de obra a justificar.

Ejemplo: Partida alzada a justificar del 1% del PEM, para gastos de acción cultural.

Presupuesto Unitario. Concepto que se refiere a un presupuesto parcial que se


compone de unidades de obra. Se asimila a Elemento Funcional (EF) pero un
comportamiento diferente en su aplicación. Su comportamiento es que puede
aparecer como una unidad de obra en un presupuesto a la que se le asigna una
medición; y en cambio se comporta como un subcapítulo de presupuesto en cuanto
a que no se le han de aplicar costes indirectos (los costes indirectos, en su caso, ya
los contemplan las unidades de obra de su composición) y no aparece en los cuadros
de precios 1 y 2.

Anexo 5. Ámbitos Territoriales


Como abreviaturas de Ámbitos Territoriales correspondientes a provincias y CCAA
del estado español, para su posible uso el campo RÓTULO_IDENTIFICACION del
registro ~V y/o el campo ABREV_AMBITO del registro ~W, se establecen las
siguientes:

E España

AND Comunidad Autónoma de Andalucía


AL Almería

CO Córdoba

H Huelva

CA Cádiz

GR Granada

J Jaén

MA Málaga

SE Sevilla

ARA Comunidad Autónoma de Aragón


TE Teruel

HU Huesca

Z Zaragoza

AST Com. Autónoma del Principado de Asturias

O Asturias

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 472


BAL Comunidad Autónoma de las Islas Baleares

PM Baleares

CAN Comunidad Autónoma de Canarias


GC Las Palmas

TF Tenerife

CBR Comunidad Autónoma de Cantabria

S Cantabria

CLM Comunidad Autónoma de Castilla-La Mancha


AB Albacete

CR Ciudad Real

CU Cuenca

GU Guadalajara

TO Toledo

CAL Comunidad Autónoma de Castilla y León


AV Ávila

SG Segovia

SO Soria

VA Valladolid

BU Burgos

LE León

P Palencia

SA Salamanca

ZA Zamora

CAT Comunidad Autónoma de Cataluña


B Barcelona

GI Girona

T Tarragona

L Lleida

EXT Comunidad Autónoma de Extremadura


BA Badajoz

CC Cáceres

GAL Comunidad Autónoma de Galicia


LU Lugo

Especificación FIEBDC-3/2007 / 473


OR Orense

PO Pontevedra

C La Coruña

MAD Comunidad de Madrid

M Madrid

MUR Com. Autónoma de la Región de Murcia

MU Murcia

NAV Comunidad Foral de Navarra

NA Navarra

PVA Comunidad Autónoma del País Vasco


VI Álava

BI Vizcaya

SS Guipúzcoa

RIO Comunidad Autónoma de La Rioja

LO La Rioja

VAL Comunidad Valenciana


V Valencia

A Alicante

CS Castellón

Anexo 6. Divisas
Como abreviaturas de las Divisas (campo DIVISA del registro ~K), se establecen las
especificadas por el BCE (Banco Central Europeo, www.ecb.int), que son las
siguientes:

Unidad M onetaria Unión M onetaria Europea


ATS Chelín Austriaco
BEF Franco Belga
DEM Marco Alemán
ESP Peseta Española
FIM Marco Finlandés
FRF Franco Francés
GRD Dracma Griega
IEP Libra Irlandesa
ITL Lira Italiana
LUF Franco Luxemburgués
NGL Florín Neerlandés
PTL Escudo Portugués

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 474


M oneda no UM E Resto
AUD Dólar Australiano
BGN Lev Búlgaro
CAD Dólar Canadiense
CHF Franco Suizo
CYP Libra Chipriota
CZK Corona Checa
DKK Corona Danesa
EEK Corona Estona
EUR Euro
GBP Libra Esterlina
HKD Dólar de Hong-Kong
HUF Forint Húngaro
ISK Corona Islandesa
JPY Yen Japonés
KRW Won Surcoreano
LTL Litas Lituano
LVL Lats Letón
MTL Lira Maltesa
NOK Corona Noruega
NZD Dólar Neozelandés
PLN Zloty Polaco
ROL Leu Rumano
SEK Corona Sueca
SGD Dólar de Singapur
SIT Tolar Esloveno
SKK Corona Eslovaca
TRL Lira Turca
USD Dólar Estadounidense
ZAR Rand Sudafricano

Anexo 7. Unidades de Medida


"El Sistema Legal de Unidades de Medida obligatorio en España es el sistema métrico
decimal de siete unidades básicas, denominado Sistema Internacional de Unidades
(SI), adoptado por la Confederación General de Pesas y Medidas y vigente en la
Comunidad Económica Europea". RD 1317/1989, de 27 de octubre, modificado por RD
1737/1997, de 20 de noviembre, por el que se establecen las unidades legales de
medida.

Según este decreto se acuerda adoptar la nomenclatura de las unidades siguientes:

Especificación FIEBDC-3/2007 / 475


m metro
m2 metro cuadrado
m3 metro cúbico
kg kilogramo
km kilómetro
t tonelada
l litro
h hora
d día
a área
Ha hectárea
cm3 centímetro cúbico
cm2 centímetro cuadrado
dm3 decímetro cúbico

Por similitud con dicho decreto, la Asociación de Redactores de Bases de Datos de


Construcción acuerda adoptar las siguientes:

u unidad
mu mil unidades
cu cien unidades
mes mes

Anexo 8. Definición de diferentes tipos de Presupuestos, según


criterios de la ARBDC.
Se denomina PRESUPUESTO al sumatorio de las cantidades obtenidas en la medición
de las unidades de obra por sus respectivos precios organizados según una estructura
(ejemplo: raíz, capítulos, subcapítulos y partidas).

PRESUPUESTO DE EJECUCIÓN MATERIAL (PEM)

(Artículo 68 del Reglamento General de Contratación del Estado):

Se denominará así al sumatorio de los productos de la cantidad de medición de cada


unidad de obra por su precio y de las partidas alzadas.

PRESUPUESTO DE EJECUCIÓN POR CONTRATA (PEC)

(Artículo 68 del Reglamento General de Contratación del Estado):

Se denominará así al resultado de incrementar el PEM en los siguientes conceptos:

1) Gastos Generales de Estructura (GGE), que inciden sobre el contrato, cifrados


en los siguientes porcentajes, aplicados sobre el PEM:

Gastos generales de empresa (GG), gastos financieros, cargas fiscales (IVA


excluido), tasas de la Administración legalmente establecidas que inciden
sobre el coste de las obras y demás derivados de las obligaciones del
contrato. El porcentaje de aplicación para las obras oficiales varía entre el
13% y el 17%, especificado por cada Departamento Ministerial.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 476


Beneficio industrial del contratista (BI), que para obras oficiales se fija en
un 6%.

2) El Impuesto sobre el Valor Añadido (IVA), que grave la ejecución de la obra,


cuyo tipo se aplicará sobre la suma del PEM y los GGE.

Este impuesto puede variar dependiendo de la zona geográfica, en cuyo caso se


aplicará el que corresponda, por ejemplo Impuesto General Indirecto Canario
(IGIC).

En obras privadas los porcentajes de gastos generales de empresa y beneficio


industrial pueden ser distintos de los especificados anteriormente.

PRESUPUESTO DE LICITACIÓN (PL)

Importe que sirve de base para formular las ofertas económicas de las empresas que
concurren a una licitación de obra.

PRESUPUESTO DE ADJUDICACIÓN (PAD)

Se denominará así al importe correspondiente a la proposición económica de la


empresa que resulta adjudicataria de la obra. Puede ser coincidente con el
Presupuesto de Licitación, inferior a éste si se produce baja, o superior a éste si se
produce alza.

Se recomienda que el alza o la baja se apliquen sobre el Presupuesto de Ejecución


Material, puesto que la cantidad resultante será la misma y sin embargo no se
reflejarán modificaciones en la imputación del IVA.

Especificación FIEBDC-3/2007 / 477


Especificación FIEBDC-3/2004
Especificación completa

INDICE:
0. ESPECIFICACIÓN del Formato.

1. ~V. Registro tipo Propiedad y VERSION.

2. ~K. Registro tipo Coeficientes.

3. ~C. Registro tipo Concepto.

4. ~D. Registro tipo Descomposición.

5. ~Y. Registro tipo Añadir Descomposición.

6. ~T. Registro tipo Texto.

7. ~P. Registro tipo Descripción Paramétrica.

8. ~L, ~Q, ~J. Registro tipo Pliegos.

9. ~W. Registro tipo Ámbito Geográfico.

10. ~G. Registro tipo INFORMACION Gráfica.

11. ~E. Registro tipo Entidad.

12. ~O. Registro tipo Relación Comercial.

13. ~X. Registro tipo INFORMACION Técnica.

14. ~M. Registro tipo Mediciones.

15. ~N. Registro tipo Añadir Mediciones.

16. ~A. Registro tipo Claves.

17. ~B. Registro tipo Cambio de CÓDIGO.

Especificación FIEBDC-3/2004 / 479


18. ~F. Registro tipo Documento Adjunto.

19. Formato FIEBDC-3. Resumen.

20. Anexo 1. Cambios respecto a versiones anteriores: 3/2002, 3/98 y 3/95.

21. Anexo 2. Descripción Paramétrica: Formato ESTÁNDAR.

22. Anexo 3. Descripción Paramétrica: API ESTÁNDAR para descripciones

paramétricas compiladas en DLL.


23. Anexo 4. Clasificación en tipos de los Conceptos.

24. Anexo 5. Ámbitos Territoriales.

25. Anexo 6. Divisas.

26. Anexo 7. Unidades de Medida.

27. Anexo 8. Definición de diferentes tipos de presupuestos, según criterios de la

ARBDC.

Definición del formato de intercambio estándar de bases de datos


de la construcción FIEBDC-3/2004
(entrada en vigor a partir del 01/07/2004)

PRESENTACIÓN

La siguiente DEFINICIÓN del Formato de Intercambio ESTÁNDAR de Bases de Datos


de CONSTRUCCIÓN, recoge las especificaciones aprobadas hasta el Acta 12 de la CTP
inclusive (celebrada el 3 de mayo de 2004) y ratificadas por la JD y ASAMBLEA de la
asociación FIEBDC.

Entrada en vigor el día 1 de julio del 2004, como VERSIÓN 3/2004.

Para facilitar su lectura, aparece en el lado derecho del texto una línea vertical en
aquellos párrafos nuevos o modificados respecto a la especificación FIEBDC-3/2002.

Este documento se pone a disposición de usuarios y empresas, con la única condición


de que cualquier implementación informática del presente formato debe recoger
tanto la entrada como la salida de datos.

Este formato pretende abarcar toda la INFORMACION contenida en las actuales bases
de datos de CONSTRUCCIÓN. No todos los desarrolladores de bases de datos
necesitarán utilizar todas las posibilidades del formato; así como tampoco todos los
programas de mediciones y presupuestos harán uso de toda la INFORMACION
suministrada.

Se prevé además, dentro del propio formato, la posibilidad de ampliación;


manteniendo en lo posible la compatibilidad entre versiones en el caso de tratar
nuevos contenidos que se prevean en un futuro.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 480


Formato FIEBDC-3. Especificación

Toda la INFORMACION necesaria para reconstruir completamente una base de datos


u obra en soportes físico y lógico distintos a aquellos en los cuales se produjo la
INFORMACION es el objetivo del formato FIEBDC, Formato de Intercambio ESTÁNDAR
de Bases de Datos de CONSTRUCCIÓN.

La INFORMACION de una base de datos, obra o certificación se dispondrá en


cualquier número de archivos en formato FIEBDC, con la extensión ".BC3", teniendo
en cuenta que estos archivos ordenados alfabéticamente contengan la
INFORMACION en el orden deseado.

La única limitación de tamaño de cada archivo será la máxima que permita el


soporte físico utilizado para su transporte. Si se utiliza algún tipo de compresor de
archivos, se deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.

El juego de caracteres a emplear en los campos CÓDIGO será el definido por MS-DOS
6.0, incluyendo < . > (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), < %> (ASCII-37), <
& > (ASCII-38), < _ > (ASCII-95).

El fin de línea será el ESTÁNDAR de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin
de archivo se marcará según el mismo ESTÁNDAR (ASCII-26). El único carácter de
control adicional que se permitirá será el tabulador (ASCII-9).

Cada archivo estará compuesto de registros, zonas de texto entre el carácter de


principio de registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la división de
archivos se deberá realizar al comienzo de un registro (carácter < ~ >).

Cada registro estará compuesto de campos separados por caracteres < | > (ASCII-
124). Todo campo con INFORMACION tendrá que finalizar con el separador de campos
y el registro deberá contener todos los separadores de campos anteriores, aunque no
contengan INFORMACION. No es necesario disponer de finalizadores de los campos
posteriores al último con INFORMACION.

Cada campo estará compuesto de subcampos separados por caracteres < \ > (ASCII-
92). El separador final, entre el último dato de un campo y el fin de campo es opcional.

El primer campo de cada registro es la cabecera de registro, una letra mayúscula que
identifica el tipo de registro.

Se ignorará cualquier INFORMACION entre el último separador de campos de un


registro (carácter < | >) o el comienzo del archivo y el comienzo del siguiente registro
(carácter < ~>).

Se ignorarán los caracteres blancos (32), tabuladores (9) y de fin de línea (13 y 10),
delante de los separadores < ~ >, < | > y < \ >.

No se podrán actualizar parcialmente campos de segundo orden (subcampos). Deberá


actualizarse la INFORMACION completa de un campo en cualquiera de los registros

La disposición de registros dentro de un archivo es completamente libre, pero se

Especificación FIEBDC-3/2004 / 481


garantizará la lectura secuencial de los mismos para evitar ambigüedades en las
sustituciones de INFORMACION.

Los campos vacíos se considerarán SIN INFORMACION, no con INFORMACION nula,


esto permite producir archivos de actualización que contengan únicamente la
INFORMACION en alguno de sus campos y, por supuesto, el CÓDIGO de referencia.

Para anular un campo numérico deberá aparecer explícitamente el valor 0 (cero).

Para anular un campo alfanumérico deberá aparecer explícitamente el RÓTULO NUL.

CONVENIOS DE NOTACIÓN

[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

<a> Indica una o más ocurrencias de "a"

(<DD>c) Tamaño máximo en número de caracteres del campo

Todos los valores numéricos irán sin separadores de miles y con el carácter punto '.'
entre la parte entera y la decimal.

Registro tipo propiedad y versión


Este registro se utiliza para documentar la procedencia y el formato de los archivos y,
cuando exista, se dispondrá al comienzo del primer archivo.

~V | [ PROPIEDAD_ARCHIVO ] | VERSION_FORMATO [ \ DDMMAAAA ] |


[ PROGRAMA_EMISION ] | [ CABECERA ] \ { RÓTULO_IDENTIFICACION \ } |
[ JUEGO_CARACTERES ] | [ COMENTARIO ] |

PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra, fecha, …

VERSION_FORMATO: VERSION del formato del archivo, la actual es FIEBDC-3/2004

DDMMAAAA: DD representa el día con dos dígitos, MM el mes y AAAA el año. Si la


fecha tiene 6 ó menos dígitos, el año se representará con dos dígitos (AA),
interpretándose con el criterio “80/20”. Esto es, cualquier año que sea igual o
superior a 80 corresponderá al siglo XX y cualquier año que sea menor de 80
corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos representa mes y año
únicamente (MMAA), si tiene menos de tres, solo el año (AA). Si se identifica la fecha
con un número impar de dígitos, se completará con el carácter cero por la izquierda.
Para representar una fecha sin un día o mes específico, se utilizará un doble cero en
cada caso.

Ejemplos:
12062000 12 de junio de 2000
120699 12 de junio de 1999
00061281 junio de 1281
061281 6 de diciembre de 1981
401 abril de 2001
PROGRAMA_EMISION: Programa y/o empresa que genera los ficheros en formato

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 482


BC3.

CABECERA: Título general de los ROTULOS_IDENTIFICACION.

RÓTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en


el campo PRECIO del registro ~C, y los conjuntos de campos de números de decimales
del registro ~K, que tal como se indica en su ESPECIFICACION, puede representar
distintas épocas, ámbitos geográficos, etc., estableciéndose una relación biunívoca
entre ambos. Véanse los anexos 5 (Ámbitos territoriales) y 6 (Divisas).

En el caso de que en el registro ~V existan más campos RÓTULO_IDENTIFICACION


que campos PRECIO en el registro ~C o que conjuntos de campos de decimales en el
registro ~K, se entenderá que el PRECIO y los conjuntos de campos de decimales de
dicho resto serán iguales al último definido.

JUEGO_CARACTERES: Asigna si el juego de caracteres a emplear es el definido para


D.O.S., cuyos identificadores serán 850 ó 437, o es el definido para Windows, cuyo
identificador será ANSI. En caso de que dicho campo esté vacío se interpretará, por
omisión, que el juego de caracteres a utilizar será el 850 por compatibilidad con
versiones anteriores.

COMENTARIO: Contenido del archivo (base, obra...).

Registro tipo coeficientes


Indica el número de decimales en cada campo numérico. Cuando el campo numérico
aparece con signo negativo, indica número máximo de decimales. En caso contrario
indica número exacto de decimales.

Si algún campo no está lleno, cada programa podrá aplicar por defecto la precisión que éste
decida.

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \
IVA | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \ DN \ DD \ DS \
DIVISA \ } | [ n ] |

Este registro incluye el campo 1 por compatibilidad con versiones anteriores del
formato, aunque los programas deben leer el campo 3 por ser más completo y en su
defecto el campo 1.

Conceptos previos
Unidad de obra: Cualquier elemento simple o elemento compuesto, con o sin costes
indirectos, que se utiliza en un presupuesto.

Elemento compuesto: Todo elemento constructivo que contiene una descomposición


y que no es ni raíz ni capítulo.

Elemento simple: Todo elemento constructivo que no contiene una descomposición y


que no es ni raíz ni capítulo.

Definiciones
DN: Decimales del campo número de partes iguales de la hoja de mediciones. Por

defecto 2 decimales.

Especificación FIEBDC-3/2004 / 483


DD: Decimales de dimensiones de las tres magnitudes de la hoja de mediciones. Por

defecto 2 decimales.

DS: Decimales de la línea de subtotal o total de mediciones. Por defecto 2 decimales.

DR: Decimales de rendimiento y factor en una descomposición. Por defecto 3

decimales.

DI: Decimales del importe resultante de multiplicar rendimiento x precio del

concepto. Por defecto 2 decimales

DP: Decimales del importe resultante del sumatorio de los costes directos del

concepto. Por defecto 2 decimales

DC: Decimales del importe total del concepto. (CD+CI). Por defecto 2 decimales

DM : Decimales del importe resultante de multiplicar la medición total del concepto


por su precio. Por defecto 2 decimales

DIVISA: Es la divisa expresada en el mismo modo que las abreviaturas utilizadas por

el BCE (Banco Central Europeo), que en su caso deberán coincidir con las del

registro ~V. En el Anexo 6 se indican las actuales.

CI: Costes Indirectos, expresados en porcentaje.

GG: Gastos Generales de la Empresa, expresados en porcentaje.

BI: Beneficio Industrial, expresado en porcentaje.

BAJA: Coeficiente de baja o alza de un presupuesto de adjudicación, expresado en

porcentaje.

IVA: Impuesto del Valor Añadido, expresado en porcentaje.

DRC: Decimales del rendimiento y del factor de rendimiento de un presupuesto, y

decimales del resultado de su multiplicación. Por defecto 3 decimales.

DC: Decimales del importe de un presupuesto, de sus capítulos, subcapítulos, etc. y

líneas de medición (unidades de obra excluidas), y decimales de los importes

resultantes de multiplicar el rendimiento (o medición) total del presupuesto, sus

capítulos, subcapítulos, etc. y líneas de medición (unidades de obra excluidas) por

sus precios respectivos. Por defecto 2 decimales.

DRO: Decimales del rendimiento (o medición) de un capítulo, substituto, etc. y línea

de medición (unidades de obra excluidas) de un presupuesto, y decimales del

resultado de la multiplicación de dicho rendimiento (o medición) por su factor. Por

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 484


defecto 3 decimales.

DFS: Decimales de los factores de rendimiento de las unidades de obra y de los

elementos compuestos. Por defecto 3 decimales.

DRS: Decimales de los rendimientos de las unidades de obra y de los elementos

compuestos, y decimales del resultado de la multiplicación de dichos rendimientos

por sus respectivos factores. Por defecto 3 decimales.

DFO: Decimales del factor de rendimiento de los capítulos, subcapítulos, etc. y líneas

de medición (unidades de obra excluidas) de un presupuesto. Por defecto 3

decimales.

DUO: Decimales del coste total de las unidades de obra. Por defecto 2 decimales.

DI: Decimales de los importes resultantes de multiplicar los rendimientos totales de

los elementos compuestos y/o elementos simples por sus respectivos precios,

decimales del importe resultante del sumatorio de los costes directos de la unidad de

obra y decimales de los costes indirectos. Por defecto 2 decimales.

DES: Decimales del importe de los elementos simples. Por defecto 2 decimales.

DN: Decimales del campo número de partes iguales de la hoja de mediciones. Por

defecto 2 decimales.

DD: Decimales de dimensiones de las tres magnitudes de la hoja de mediciones. Por

defecto 2 decimales.

DS: Decimales de la línea de subtotal o total de mediciones. Por defecto 2 decimales.

DIVISA: Es la divisa expresada en el mismo modo que las abreviaturas utilizadas por

el BCE (Banco Central Europeo), que en su caso deberán coincidir con las del

registro ~V. En el Anexo 6 se indican las actuales.

n: Es el número de la opción de la función BdcGloParNumero que se refiere al


concepto divisa.

Si un importe viene con un número mayor de decimales del estipulado en el


registro ~K, se debe redondear al número de decimales indicado en dicho registro ~K
(criterio <5 queda igual y >= 5 suma), y las operaciones que se hagan del importe
serán con este valor redondeado.

Para relacionar una determinada divisa con su convención de decimales, deberá


coincidir el orden en que aparezcan las diferentes divisas en el registro ~K, con el
orden indicado en el registro ~V o con el orden de las opciones de la función
BdcGloOpcNumero, en función de su caso. Si en el registro ~V hay más RÓTULOS
que divisas en el registro ~K, los precios sin su correspondiente divisa tomarán la
última divisa definida en el registro ~K.

Ejemplo de una base de precios que facilita importes de 2 ámbitos territoriales en 2


divisas (Se indican en negrita los campos afectados):

Especificación FIEBDC-3/2004 / 485


~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \DDMMAA |
PROGRAMA_EMISION | [Precios de diferentes ámbitos territoriales en diferentes
divisas] \ { B-eur \ T-eur \ B-usd \ T-usd } | JUEGO_CARACTERES |

~C | {CÓDIGO \ } | UNIDAD | RESUMEN | { 120 \ 108 \ 102,8 \ 92,52 } |


{ FECHA \ } | TIPO |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \
IVA | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \ DN \ DD \ DS \ eur
\ DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \ DN \ DD \ DS \ eur \
DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \ DN \ DD \ DS \ usd \ } [ n ]
|

Registro tipo concepto


Este registro contiene la INFORMACION básica de un concepto de cualquier tipo,
material, auxiliar, partida, capítulo, entidad, documento, etc., tanto en su VERSION
paramétrica como DEFINICION tradicional.

~C | CÓDIGO { \ CÓDIGO } | [ UNIDAD ] | [ RESUMEN ] | { PRECIO \ } | { FECHA \


} | [ TIPO ] |

CÓDIGO: CÓDIGO del concepto descrito. Un concepto puede tener varios CODIGOs
que actuarán como sinónimos, este mecanismo permite integrar distintos sistemas
de clasificación.

Para distinguir el concepto tipo raíz de un archivo, así como los conceptos tipo
capítulo, se ampliará su CÓDIGO con los caracteres '##' y '#' respectivamente;
quedando dicha NOTACIÓN reflejada obligatoriamente en el registro tipo ~C ,siendo
opcional en los restantes registros del mismo concepto.

Las referencias a un CÓDIGO con y sin # y/o ##, se entienden únicas a un mismo
concepto.

Únicamente puede haber un concepto raíz en una base de datos u obra.

Si un código cuenta con un carácter '#' intercalado, se entenderá que corresponde al


conjunto CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO definido en el registro de Tipo
Relación Comercial (registro ~O) o en la función BdcComercCodigo.

UNIDAD: Unidad de medida. Existe una relación de unidades de medida


recomendadas, elaborada por la Asociación de Redactores de Bases de Datos de
CONSTRUCCIÓN. Véase el Anexo 7 sobre Unidades de Medida

RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el número de


caracteres que admite en su campo resumen.

PRECIO: Precio del concepto. Un concepto puede tener varios precios alternativos que
representen distintas épocas, ámbitos geográficos, etc., definidos biunívocamente
respecto al campo [CABECERA \ {RÓTULO_IDENTIFICACION\} del registro ~V. Cuando
haya más de un precio se asignarán secuencialmente a cada RÓTULO definido; si

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 486


hay más RÓTULOS que precios, se asignará a aquellos el último precio definido. En el
caso que el concepto posea descomposición, este precio será el resultado de dicha
descomposición y se proporcionará, de forma obligatoria, para permitir su
comprobación. En caso de discrepancia, tendrá preponderancia el resultado obtenido
por la descomposición, tal como se indica en el registro Tipo Descomposición, ~D, y
complementariamente se podría informar al usuario de dicha situación. Esto se
aplica también a los conceptos tipo capítulo y concepto raíz de una Obra o
Presupuesto. Como excepción a esta regla está el intercambio de mediciones no
estructuradas (véase la descripción del registro Tipo Mediciones, ~M).

FECHA: Fecha de la última actualización del precio. Cuando haya más de una fecha
se asignarán secuencialmente a cada precio definido, si hay más precios que fechas,
los precios sin su correspondiente fecha tomarán la última fecha definida.

Las fechas se definirán en el formato DDMMAAAA: DD representa el día con dos


dígitos, MM el mes y AAAA el año. Si la fecha tiene 6 ó menos dígitos, el año se
representará con dos dígitos (AA), interpretándose con el criterio “80/20”. Esto es,
cualquier año que sea igual o superior a 80 corresponderá al siglo XX y cualquier año
que sea menor de 80 corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos
representa mes y año únicamente (MMAA), si tiene menos de tres, solo el año (AA).
Si se identifica la fecha con un número impar de dígitos, se completará con el
carácter cero por la izquierda. Para representar una fecha sin un día o mes
específico, se utilizará un doble cero en cada caso.

Ejemplos:
12062000 12 de junio de 2000

120699 12 de junio de 1999

00061281 junio de 1281

061281 6 de diciembre de 1981

401 abril de 2001

TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos:

0 (Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 (Materiales).

También se permite (y aconseja) utilizar la clasificación indicada por el BOE y la CNC


en índices y fórmulas polinómicas de revisión de precios así como los aconsejados por
la Asociación de Redactores de Bases de Datos de la Construcción. En el Anexo 4
aparecen los tipos actualmente vigentes.

Registro tipo descomposición


Este registro contiene la descomposición de un concepto en otros a través de una o
dos cantidades. El mismo registro lo emplearemos para definir la descomposición de
un concepto tipo unidad de obra en conceptos tipo materiales, mano de obra,
maquinaria y auxiliares y para la descomposición de un concepto tipo capítulo en
conceptos tipo unidad de obra o subcapítulos.

Si se define como concepto derivado un concepto que no posee partes variables en su


definición (no es un paramétrico) ni es un capítulo, entonces, un concepto derivado

Especificación FIEBDC-3/2004 / 487


sólo puede contener en su descomposición a conceptos derivados.

~D | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

CÓDIGO_PADRE: CÓDIGO del concepto descompuesto.

CÓDIGO_HIJO: CÓDIGO de cada concepto que interviene en la descomposición.

FACTOR: Factor de rendimiento, por defecto 1.0

RENDIMIENTO: Número de unidades, rendimiento o medición, por defecto 1.0

Cuando el CÓDIGO_HIJO incluye el carácter ‘%’ o el carácter ‘&’ es un porcentaje


sobre las líneas anteriores de la descomposición. El código de los porcentajes tiene
tres partes:

1. Prefijo, que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un carácter, que puede ser ‘&’ (porcentaje acumulable), o ‘%’ (porcentaje no


acumulable).

3. Una serie de caracteres libres que permite diferenciar un porcentaje de otro.

Ejemplo: OP%N0001

OP: Sobre todas la líneas anteriores cuyo código comience por OP.

%: Porcentaje no acumulable

N0001: Código diferenciador.

El rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la actual
y que queden afectadas por la máscara.

Ejemplo de una línea de descomposición: O%N0001 \\0.03\

Esta línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo código comience por O y cuyo texto
estará en la definición del código 'O%N0001'.

Ejemplo: ~C | O%N0001 | % | Medios auxiliares |

A efectos de cálculo de precios compuestos los porcentajes acumulables y no


acumulables se comportan de la misma forma. La diferencia entre ellos únicamente
se manifiesta en el cálculo de cantidades de simples que hay en un presupuesto,
para ello se consideraran los acumulables (‘&’) como porcentajes de perdidas, roturas
u otros casos que impliquen una mayor cantidad de los recursos en líneas
superiores. Los no acumulables (‘%’) se pueden referir a pequeño material u otros
casos que no impliquen una mayor necesidad de recursos en líneas superiores.

La existencia del factor en líneas de descomposición y el uso casi nulo que se ha

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 488


hecho de los porcentajes acumulables (‘&’) hace que éstos se mantengan por razones
históricas pero se desaconseja su uso.

En el caso que el importe de un concepto se pueda obtener mediante el campo precio


del registro ~C y también mediante el registro ~D, será el importe obtenido de este
último el que primará sobre el importe del primero.

Registro tipo añadir descomposición


Con este registro se pueden añadir líneas de descomposición, el registro tipo ~D
cambia la descomposición completa. Para añadir conceptos nuevos a una base de
datos, además de definir los registros C, T, L, D,… deberíamos posicionar los nuevos
conceptos en el capítulo o capítulos donde queramos situarlos, para ello, es necesario
un registro que nos permita añadir una o varias líneas de descomposición por cada
capítulo donde queramos posicionar un nuevo concepto.

~Y | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

Todos los campos tienen el mismo significado que en el registro tipo D.

Registro tipo texto


Este registro contiene el texto descriptivo de un concepto

~T | CÓDIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito

TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de tamaño. El


texto podrá contener caracteres fin de línea (ASCII-13 + ASCII-10) que se
mantendrán al reformatearlo.

Registro tipo descripción paramétrica


Este registro contiene la descripción paramétrica, bien en formato tradicional bien
en formato API para DLL, que incluye la DEFINICION de parámetros,
descomposiciones, comentario de ayuda a la selección de parámetros, resúmenes,
textos, pliegos, claves e INFORMACION comercial, en función de tablas, expresiones y
variables, para una familia de conceptos.

Este registro puede adoptar dos formas:

~P | | [ DESCRIPCION_PARAMETRICA ] | [ NOMBRE.DLL ] |

Cuando CÓDIGO_FAMILIA está lleno, o bien DESCRIPCION_PARAMETRICA está llena,


o bien DESCRIPCION_PARAMETRICA está vacía. En éste último caso se accede a la
descripción paramétrica de la familia a través del archivo NOMBRE.DLL.

~P | CÓDIGO_FAMILIA | [ DESCRIPCION_PARAMETRICA ] |

Cuando CÓDIGO_FAMILIA está vacío, se refiere al paramétrico global.

Si DESCRIPCION_PARAMETRICA está llena, el paramétrico global se establece a


partir de ésta. Si DESCRIPCION_PARAMETRICA está vacía y NOMBRE.DLL está lleno,
se establece a partir de éste. Si DESCRIPCION_PARAMETRICA y NOMBRE.DLL están

Especificación FIEBDC-3/2004 / 489


llenos a la vez, tan solo es válida DESCRIPCION_PARAMETRICA.

CÓDIGO_FAMILIA: CÓDIGO del concepto tipo familia descrito. Si se utiliza un modelo


de codificación dependiente de los parámetros (ver Anexos 2 y 3), este código debe
poseer un carácter ‘$’ en su séptima posición, y los conceptos en los que se deriva
tendrán como código los seis primeros caracteres del mismo más un carácter
adicional por cada parámetro que posea.

DESCRIPCION_PARAMETRICA: Ver Anexo 2.

NOMBRE.DLL: Ver Anexo 3.

Registro tipo pliegos


Este registro contiene las diferentes secciones y textos del pliego de condiciones de
un concepto. El pliego de condiciones se estructura de forma jerárquica con el
Sistema de Clasificación por Codificación y de forma facetada en varias secciones de
distinto contenido.

SECCIONES DE LOS PLIEGOS.


Cuando el primer campo del registro ~L está vacío, el registro define los CODIGOs de
las SECCIONES de cada pliego y sus ROTULOs correspondientes. Este registro es
único para una base de datos u obra.

~L | | < CODIGO_SECCION_PLIEGO \ [ ROTULO_SECCION_PLIEGO ] \ > |

CÓDIGO_SECCION_ PLIEGO: CÓDIGO que define cada SECCION o faceta del pliego.

RÓTULO_SECCION_PLIEGO: DEFINICION del RÓTULO asociado a cada CÓDIGO


correspondiente de cada SECCION o faceta del pliego.

Ejemplo de las secciones de los pliegos definidas para la Base de Datos de


CONSTRUCCIÓN de la Comunidad de Madrid y la Base de Datos de CONSTRUCCIÓN
de la Comunidad Valenciana, indicando CÓDIGO y RÓTULO de la SECCION

~L| | DES\ DESCRIPCION Y COMPLEMENTOS AL TEXTO


\PRE\ REQUISITOS PREVIOS A LA EJECUCIÓN

\COM\ COMPONENTES

\EJE\ EJECUCION Y ORGANIZACION

\NOR\ NORMATIVA

\CON\ CONTROL Y ACEPTACION

\SEG\ SEGURIDAD E HIGIENE

\VAL\ CRITERIOS DE VALORACION Y MEDICION

\MAN\ MANTENIMIENTO

\VAR\ VARIOS \ |

MODELO 1 DE TEXTOS DE LOS PLIEGOS.


Cuando el primer campo del registro ~L no está vacío, identifica a un concepto
determinado. Puede haber un registro de este tipo por cada concepto de una base de

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 490


datos u obra.

~L | CÓDIGO_CONCEPTO | { CÓDIGO_SECCION_PLIEGO \
TEXTO_SECCION_PLIEGO \ } |

{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_RTF \ } |
{ CÓDIGO_SECCION_PLIEGO \ ARCHIVO_TEXTO_HTM \ } |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.

CÓDIGO_SECCION_PLIEGO: DEFINICION del CÓDIGO asociado a cada pliego

TEXTO_SECCION_PLIEGO: Texto asignado a cada faceta o SECCION del pliego de


condiciones del concepto.

El pliego de condiciones de cada concepto estará dividido con caracteres '\' en varias
secciones o facetas, pensadas para imprimirse juntas o por separado.

Los fines de línea de cada SECCION del pliego se tratarán como en el REGISTRO
TIPO TEXTO.

ARCHIVO_TEXTO_RTF: Es el nombre del archivo que contiene el texto en formato


RTF asignado a cada SECCION del pliego del concepto. Dicho archivo deberá ubicarse
en el mismo directorio donde se hallen el/los archivos con extensión BC3 que
incluyen su referencia.

ARCHIVO_TEXTO_HTM: Es el nombre del archivo que contiene el texto en formato


HTM asignado a cada SECCION del pliego del concepto. Dicho archivo deberá
ubicarse en el mismo directorio donde se hallen el/los archivos con extensión BC3
que incluyen su referencia.

MODELO 2 DE TEXTOS DE LOS PLIEGOS.


Otra opción permite asignar el Pliego mediante párrafos de texto asociados a
conceptos, utilizando el siguiente esquema de registros, como forma alternativa a la
anterior:

~Q | < CODIGO_CONCEPTO \ > | { CÓDIGO_SECCION_PLIEGO \


CÓDIGO_PARRAFO \ { ABREV_AMBITO; } \ } |

~J | CÓDIGO_PARRAFO | [ TEXTO_PARRAFO ] | | [ ARCHIVO_PARRAFO_RTF ] |


[ ARCHIVO_PARRAFO_HTM ] |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.


Será único para cada registro ~Q.

Este registro es de sustitución de la INFORMACION, no es de acumulación.

CÓDIGO_SECCION_PLIEGO: DEFINICION del CÓDIGO asociado a cada pliego.


Corresponde al definido en el registro de cabecera de pliego ~L.

CÓDIGO_PARRAFO: CÓDIGO del texto asociado a cada sección del pliego.

ABREV_AMBITO: Identificador del ámbito geográfico de la sección del pliego. Se


define en un registro propio.

Especificación FIEBDC-3/2004 / 491


TEXTO_PARRAFO: Texto que define el contenido de los pliegos que se asocian a un
concepto y se identifica con CÓDIGO_PARRAFO.

TEXTO_PARRAFO_RTF: Texto que define el contenido de los pliegos que se asocian a


un concepto y se identifica con CÓDIGO_PARRAFO, con formato RTF, de forma
opcional, siendo siempre obligatorio el campo TEXTO_PARRAFO.

ARCHIVO_PARRAFO_RTF: Es el nombre del archivo en formato RTF que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CÓDIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

ARCHIVO_PARRAFO_HTM: Es el nombre del archivo en formato HTM que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CÓDIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

Registro tipo ámbito geográfico


Establece el ámbito geográfico correspondiente a los Pliegos de Condiciones asociados
a la Base de Datos. No necesariamente deberá corresponder al campo CABECERA
definido en el registro ~V.

~W | < ABREV_AMBITO \ [ AMBITO ] \ > |

ABREV_AMBITO: Nombre abreviado que identifica el territorio geográfico al que se


refiere. (Comunidad Autónoma, Provincia, Región, Comarca, Localidad, etc.). El
identificador < * > (ASCII - 42) indica AMBITO_GENERAL, y representa todo el
territorio nacional.

AMBITO: Nombre completo del territorio geográfico.

Existe una relación de abreviaturas recomendadas, elaborada por la Asociación de


Redactores de Bases de Datos de CONSTRUCCIÓN, que se puede consultar en el
Anexo 5.

Registro tipo información geográfica


Este registro contiene el/los archivos gráficos asociados a un concepto. Todos los
archivos externos deben ubicarse en el mismo directorio donde se hallen el/los
archivos con extensión BC3 que incluyen su referencia.

~G | CÓDIGO_CONCEPTO | < ARCHIVO_GRAFICO. EXT \ > |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito en la base de datos y contenido


en ella.

ARCHIVO_GRAFICO. EXT: Nombre del archivo que contiene la INFORMACION gráfica.


Se usarán como referencia programas estandarizados de uso general, para chequear
y verificar el contenido del fichero. Estos programas serán:
Ficheros tipo ráster: Extensión .BMP, .PCX : Windows 3.1

Extensiones .GIF, .JPG, .PNG: MS Internet Explorer 5.5

Extensión .TIF: Paint Shop Pro 4.0

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 492


Ficheros vectoriales: Extensión .WMF : Windows 3.1

Extensión .DXF : Autocad 12 Windows

Registro tipo entidad


Define las entidades suministradoras de documentación técnica, tarifas de precios y
especificaciones de los conceptos contenidos en la Base de Datos.

~E | CÓDIGO_ENTIDAD | [ RESUMEN ] | [ NOMBRE ] | { [ TIPO ] \ [ SUBNOMBRE ] \


[ DIRECCIÓN ] \ [ CP ] \ [ LOCALIDAD ] \ [ PROVINCIA ] \ [ PAIS ] \ { TELEFONO; } \
{ FAX; } \ {PERSONA_CONTACTO; } \ } | [ CIF ] \ [ WEB ] \ [ EMAIL ] \ |

CÓDIGO_ENTIDAD: CÓDIGO del SCc que define a la entidad (empresa, organismo,


etc.)

RESUMEN: Nombre abreviado de la entidad.

NOMBRE: Nombre completo de la entidad.

TIPO: Se definen los siguientes:


C central.

D delegación.

R representante.

SUBNOMBRE: Nombre de la delegación o representante en caso de que sea distinto


de la central. Normalmente estará vacío.

DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAIS: Dirección postal de la entidad


con todos sus datos, existiendo una dirección por cada subcampo tipo, de forma
ordenada y secuencial.

TELEFONO: Números de teléfono de la entidad, de forma ordenada y secuencial


respecto al subcampo tipo, separados con el carácter < ; > (ASCII-59). Se indicará con
nueve caracteres numéricos, incluido el prefijo de la provincia.

FAX: Números de fax de la entidad, con las mismas especificaciones que el campo
anterior.

PERSONA_CONTACTO: Nombre de las personas de contacto con la entidad y cargo que


desempeña, podrá haber varias asociadas a cada subcampo tipo, de forma que estén
separadas por el carácter ASCII-59.

CIF: Código de Identificación Fiscal de la empresa.

WEB: Página web de la empresa.

MAIL: Dirección de correo electrónico de la empresa.

Registro tipo relación comercial


Este registro establece los vínculos entre los conceptos de una Base de Datos General
( BDG ) con los productos comerciales de una Base de Datos Específica ( BDE ), y/o
viceversa.

Especificación FIEBDC-3/2004 / 493


Así una Base de Datos ( BD ) podrá contener CONCEPTOS genéricos de una BDG,
CONCEPTOS referentes a productos comerciales de una BDE, o ambas a la vez.

~O | CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO | | < CODIGO_ARCHIVO \


CODIGO_ENTIDAD # CODIGO_CONCEPTO \ > |

CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CÓDIGO_RAIZ_BD: Se refiere a la identificación del CÓDIGO de la entidad que


elabora la BD. Este CÓDIGO debe ser facilitado por la entidad que elabora la BD,
para evitar ambigüedades. Se recomienda que éste sea el propio CIF de la entidad.

CÓDIGO_CONCEPTO: Se refiere a un concepto que pertenece a CÓDIGO_RAIZ_BD,


y empleado por ésta en su sistema de clasificación por codificación.

CÓDIGO_ARCHIVO: Se refiere al nombre del archivo que, de existir, indica el lugar


donde se encuentra la INFORMACION referente a CÓDIGO_ENTIDAD #
CÓDIGO_CONCEPTO. Sin embargo si dicho CÓDIGO_ARCHIVO no existe, entonces
indica que CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO se encuentra en la misma BD.

CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CÓDIGO_ENTIDAD: Se refiere a la identificación del CÓDIGO de la entidad a la que


se le asocia INFORMACION. Este CÓDIGO debe ser facilitado por la entidad que
elabora la BD, de acuerdo con su sistema de clasificación, para evitar
ambigüedades. Se recomienda que éste el propio CIF de la entidad.

CÓDIGO_CONCEPTO: Se refiere a un concepto que pertenece a CÓDIGO_ENTIDAD,


y empleado por la entidad que elabora la BD en su sistema de clasificación por
codificación.

Cuando CÓDIGO_CONCEPTO se refiera a un producto comercial, dicho CÓDIGO


deberá ser facilitado por el fabricante, y no podrá coincidir nunca con la designación
de CÓDIGO_RAIZ_BD, CÓDIGO_ENTIDAD o CÓDIGO_CONCEPTO, cuando éste se
refiere a un concepto genérico. Al tener dicho producto comercial un tratamiento de
CONCEPTO, éste puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica, etc.). Para
poder utilizar los registros mencionados, el código identificador del concepto será
CÓDIGO_ENTIDAD # CÓDIGO_CONCEPTO.

Registro tipo información técnica


Este registro contiene la ESPECIFICACION de otros datos referentes al concepto,
como por ejemplo, peso específico o nominal, características físicas, cuantías
geométricas, propiedades físico-mecánicas, etc.

Estos datos podrían emplearse en otras utilidades, como el cálculo de los coeficientes
de transmisión térmica, aislamiento acústico, etc.

El registro tipo INFORMACION Técnica puede adoptar dos formas:

Si el primer campo está vacío, éste sirve como diccionario de términos de

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 494


INFORMACION Técnica a los cuales se les podrá asociar una descripción y una
unidad de medida.

~X | | < CODIGO_IT \ DESCRIPCION_IT \ UM \ > |

Si el primer campo identifica a un concepto, la INFORMACION que se especificará a


continuación serán la/las parejas de términos de INFORMACION técnica con sus
respectivos valores.

~X | CÓDIGO_CONCEPTO | < CODIGO_IT \ VALOR_IT \ > |

CÓDIGO_IT: CÓDIGO de la INFORMACION Técnica descrita.

DESCRIPCION_IT: Texto descriptivo de la INFORMACION Técnica, sin limitación de


tamaño.

UM: En el caso que los valores de la INFORMACION Técnica sean valores numéricos,
se indicará su Unidad de Medida, de acuerdo con el Sistema Internacional de
Unidades de Medida.

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito, contenido en la base de datos.


Será único para cada registro ~X.

VALOR_IT: Valor alfabético o numérico de la INFORMACION Técnica.

Registro tipo mediciones


En este registro figuran las mediciones (cantidades), en que interviene un concepto
de un presupuesto en la descomposición de otro de mayor rango.

En el intercambio de archivos de presupuestos, deberá figurar siempre este registro,


exista o no desglose de mediciones.

Cuando se trate de intercambiar una relación de registros ~M que recogen un listado


de mediciones no estructurado, no es necesario la disposición de un CÓDIGO raíz ni
los registros ~D complementarios. El operador indicará en estos casos cual es el
destino de la medición.

~M | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } | MEDICION_TOTAL

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |


[ETIQUETA] |

CÓDIGO_PADRE: CÓDIGO del concepto padre o concepto descompuesto del


presupuesto.

CÓDIGO_HIJO: CÓDIGO del concepto hijo o concepto de la línea de descomposición.

Este campo es opcional en el caso de intercambiar mediciones no estructuradas, es


decir, que no pertenecen a la estructura general y completa de un presupuesto.

POSICION: Posición del CONCEPTO_HIJO en la descomposición del


CONCEPTO_PADRE, este dato permite identificar la medición cuando la
descomposición del concepto padre incluye varios conceptos hijo con el mismo
CÓDIGO, la numeración de las posiciones comenzará con el 1.

Especificación FIEBDC-3/2004 / 495


El campo POSICION deberá especificarse siempre en intercambio de presupuestos
cuando éste sea completo y estructurado, e indicará el camino completo de la
medición descrita en la estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la
medición correspondiente al capítulo 3 del archivo; subcapítulos 5 del capítulo 3; y
partida 2 del subcapítulos 5. En mediciones no estructuradas este campo es opcional.

MEDICION_TOTAL: Debe coincidir con el rendimiento del registro tipo '~D'


correspondiente.

Incorpora el sumatorio del producto de unidades, longitud, latitud y altura o el


resultado de expresiones de cada línea, al leer este registro se recalculará este valor.

TIPO: Indica el tipo de línea de medición de que se trate. Usualmente este subcampo
estará vacío. Los tipos establecidos en esta VERSION son:

Subtotal parcial: En esta línea aparecerá el subtotal de las líneas anteriores desde
el último subtotal hasta la línea inmediatamente anterior a ésta.

Subtotal acumulado: En esta línea aparecerá el subtotal de todas las líneas


anteriores desde la primera hasta la línea inmediatamente anterior a ésta.

Expresión: Indicará que en el subcampo COMENTARIO aparecerá una expresión


algebraica a evaluar. Se podrán utilizar los operadores '(', ')', '+', '-', '*', '/' y '^'; las
variables 'a', 'b', 'c' y 'd' (que tendrán por valor las cantidades introducidas en los
subcampos UNIDADES, LONGITUD, LATITUD y ALTURA respectivamente); y la
constante 'p' para el valor Pi=3.1415926. Si la expresión utiliza alguna variable,
ésta será válida hasta la siguiente línea de medición en la que se defina otra
expresión.

COMENTARIO: Texto en la línea de medición. Podrá ser un comentario o una


expresión algebraica.

UNIDADES, LONGITUD, LATITUD, ALTURA: Cuatro número reales con las


mediciones. Si alguna magnitud no existe se dejará este campo vacío.

ETIQUETA: Es opcional, surge de la necesidad de transmitir un identificador de los


conceptos (capítulos, subcapítulos o partidas). Este identificador lo imprimen,
diversos programas, en los listados de mediciones o presupuesto de una Obra (por
ejemplo, ‘2.10’, ‘A-27b’, ‘001001’,…); siendo único para cada concepto (capítulo,
subcapítulos o partida) y, en general, diferente de la codificación de la base de datos
empleada para confeccionar el presupuesto (El ‘CÓDIGO_HIJO’ muchas veces no
aparece en los listados mencionados).

Para transmitir la etiqueta de un capítulo, o subcapítulos, del presupuesto, también


se utilizará este registro. En ese caso, el campo MEDICION_TOTAL, habitualmente,
será 1 y los campos TIPO, COMENTARIO, UNIDADES, LONGITUD, LATITUD y ALTURA
no existirán:

~M | [CÓDIGO_PADRE\] CÓDIGO_HIJO | {POSICION\} |1| | [ETIQUETA] |

Registro tipo añadir mediciones


Igual que el registro tipo ~M pero añade las líneas de medición de este registro a las
ya existentes en vez de sustituir toda la medición como hace en aquel.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 496


~N | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } |MEDICION

| {TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |


[ETIQUETA]|

Registro tipo claves


Este registro establece la relación entre CODIGOs y descriptores del tesauro, para
permitir la búsqueda de conceptos mediante términos clave.

~A | CÓDIGO_CONCEPTO | < CLAVE_TESAURO \ > |

CÓDIGO_CONCEPTO: CÓDIGO del concepto descrito en la base de datos y contenido


en ella.

CLAVE_TESAURO: Términos clave relacionados con el concepto. Los términos


compuestos (hormigón armado, cartón-yeso, mortero mixto) se identificarán unidos
mediante < _ > (ASCII - 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No
está permitido el empleo del espacio en blanco.

Registro tipo cambio de código


Con este registro se posibilita el cambio o anulación de los CODIGOs de los
conceptos, única unidad de INFORMACION que no se podía modificar con los registros
definidos anteriormente.

~B | CÓDIGO_CONCEPTO | CÓDIGO_NUEVO |

CÓDIGO_CONCEPTO: CÓDIGO del concepto a cambiar o anular. Debe existir y


pertenece a un concepto contenido en la BD

CÓDIGO_NUEVO: Nuevo CÓDIGO para CÓDIGO_CONCEPTO, no debe existir


previamente. Si este campo está vacío, se entiende que hay que eliminar
CÓDIGO_CONCEPTO.

Registro tipo documento adjunto


Este registro permite asociar a un concepto archivos con diferentes tipos de
información.

~F | CÓDIGO_CONCEPTO | { TIPO \ { ARCHIVO.EXT ; } \ [ DESCRIPCION_ARCHIVO ]


\}|

donde:

CÓDIGO_CONCEPTO: Código del concepto descrito en la base de datos y contenido en


ella al cual se le asocia una información en forma de archivo.

TIPO: Código del tipo de información que contiene el archivo.

Inicialmente se consideran los siguientes:


0- otros

1- características técnicas y de fabricación

2- manual de colocación, uso y mantenimiento

Especificación FIEBDC-3/2004 / 497


3- certificado/s de elementos y sistemas

4- normativa y bibliografía

5- tarifa de precios

6- condiciones de venta

7- carta de colores

8- ámbito de aplicación y criterios selección

9- cálculo de elementos y sistemas

10- presentación, datos generales, objetivos, etc. de empresa

11- certificado/s de empresa

12- obras realizadas

ARCHIVO.EXT: Nombre del archivo con extensión que contiene información de


CÓDIGO_CONCEPTO.

Un archivo (principal) puede contener archivos vinculados, separados con el carácter


< ; > (ASCII-59), siendo el principal el primero que se muestre. Todos los archivos
(incluso los vinculados) deben ubicarse en el mismo directorio donde se hallen el/los
archivos con extensión BC3 que incluyen su referencia.

Además de las extensiones permitidas en los registros ~G, ~L y ~J, se añaden los
siguientes usando como referencia programas estandarizados de uso general, para
chequear y verificar el contenido del fichero:
Extensión .PDF: Acrobat Reader v.5

Extensión .AVI: Media Player v.7

Extensión .PPT: Power Point v.10

DESCRIPCION_ARCHIVO: Breve descripción de la información contenida en el


archivo.

Formato FIEBDC-3. Resumen


~V | [ PROPIEDAD_ARCHIVO ] | VERSION_FORMATO [ \ DDMMAAAA ] |
[ PROGRAMA_EMISION ] | [ CABECERA ] \ { RÓTULO_IDENTIFICACION \ } |
[ JUEGO_CARACTERES ] | [ COMENTARIO ] |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | [ [CI] \ [GG] \ [BI] \


[BAJA] \ [IVA] ] | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \
DES \ DN \ DD \ DS \ DIVISA \ } | [n]|

~C | CÓDIGO { \ CÓDIGO } | [ UNIDAD ] | [ RESUMEN ] | { PRECIO \ } |


{ FECHA \ } | [ TIPO ] |

~D | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

~Y | CÓDIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |

~T | CÓDIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 498


~P | | [ DESCRIPCION_PARAMETRICA ] | [ NOMBRE.DLL ] |

~P | CÓDIGO_FAMILIA | [ DESCRIPCION_PARAMETRICA ] |

~L | | < CODIGO_SECCION_PLIEGO \ [ ROTULO_SECCION_PLIEGO ] \ > |

~L | CÓDIGO_CONCEPTO | { CÓDIGO_SECCION_PLIEGO \
TEXTO_SECCION_PLIEGO \ } |{ CÓDIGO_SECCION_PLIEGO \
ARCHIVO_TEXTO_RTF \ } | { CÓDIGO_SECCION_PLIEGO \
ARCHIVO_TEXTO_HTM \ } |

~Q | < CODIGO_CONCEPTO \ > | { CÓDIGO_SECCION_PLIEGO \


CÓDIGO_PARRAFO \ { ABREV_AMBITO; } \ } |

~J | CÓDIGO_PARRAFO | [ TEXTO_PARRAFO ] | | [ ARCHIVO_PARRAFO_RTF ] |


[ ARCHIVO_PARRAFO_HTM ] |

~W | < ABREV_AMBITO \ [ AMBITO ] \ > |

~G | CÓDIGO_CONCEPTO | < ARCHIVO_GRAFICO. EXT \ > |

~E | CÓDIGO_ENTIDAD | [ RESUMEN ] | [ NOMBRE ] | { [ TIPO ] \


[ SUBNOMBRE ] \ [ DIRECCIÓN ] \ [ CP ] \ [ LOCALIDAD ] \ [ PROVINCIA ] \
[ PAIS ] \ { TELEFONO; } \ { FAX; } \ {PERSONA_CONTACTO; } \ } | [ CIF ] \
[ WEB ] \ [ EMAIL ] \ |

~O | CÓDIGO_RAIZ_BD # CÓDIGO_CONCEPTO | | < CODIGO_ARCHIVO \


CODIGO_ENTIDAD # CODIGO_CONCEPTO \ > |

~X | | < CODIGO_IT \ DESCRIPCION_IT \ UM \ > |

~X | CÓDIGO_CONCEPTO | < CODIGO_IT \ VALOR_IT \ > |

~M | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \


COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |
[ETIQUETA] |

~N | [ CÓDIGO_PADRE \ ] CÓDIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \


COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |
[ETIQUETA] |

~A | CÓDIGO_CONCEPTO | < CLAVE_TESAURO \ > |

~B | CÓDIGO_CONCEPTO | CÓDIGO_NUEVO |

~F | CÓDIGO_CONCEPTO | { TIPO \ { ARCHIVO.EXT ; } \


[ DESCRIPCION_ARCHIVO ] \ } |

Anexo 1. Cambios respecto a versiones anteriores: 3/2002, 3/98 y


3/95.
Resumen de los cambios de la versión 3/2004 con respecto a 3/2002:

- Especificación: incluir la notación <a> para campos opcionales.

Especificación FIEBDC-3/2004 / 499


- ~V Registro tipo VERSIÓN: Nuevo campo COMENTARIO.

- ~K Registro tipo COEFICIENTES: Se establece los decimales por defecto,


modificaciones de algunos campos decimales.

- ~D Registro tipo DESCOMPOSICIÓN: Se establece el valor por defecto para el


rendimiento.

- ~C Registro tipo CONCEPTO: Modificaciones de los campos CÓDIGO y PRECIO.

- ~M y ~N Registro tipo MEDICION y AÑADIR MEDICION: Nuevo campo ETIQUETA.

- Registros actualizados con las notaciones para definir campos obligatorios y


opcionales: V, D, Y, T, L, Q, W, G, O, X, A y B.

- Nuevo registro ~F Tipo documento adjunto.

Cambios de la API estándar para descripciones paramétricas compiladas:

- Nueva función BdcTipoDescripcion().

- Nueva función BdcInvalidos() .

- Aclaración de la función BdcPliego().

- Modificación de los parámetros de la función BdcComercCodigo().

- Nuevo mensaje de error BDCERR_PARÁMETRO_INCORRECTO.

- Nuevas funciones BdcDocNumero() y BdcDocCodigo() relacionadas con el


registro ~F tipo documento adjunto.

Clasificación en tipos de los conceptos:

-Nuevo tipo Presupuesto Unitario.

A continuación se indica la lista de apartados y registros del FIEBDC-3/2004


afectados por ampliaciones y/o modificaciones:

FIEBDC- FIEBDC- FIEBDC-

Apartado 3/2002 3/98 3/95

PRESENTACIÓN. X X X

FORMATO FIEBDC-3. ESPECIFICACION. X X X

~V. Registro tipo PROPIEDAD Y VERSION. X X X

~K. Registro tipo COEFICIENTES. X X X

~C. Registro tipo CONCEPTO. X X X

~D.,Registro tipo DESCOMPOSICIÓN. X X X

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 500


~Y.,Registro tipo AÑADIR DESCOMPOSICIÓN. X X X

~T. Registro tipo TEXTO. X X X

~P. Registro tipo DESCRIPCIÓN PARAMETRICA. X

~L. Registro tipo PLIEGOS. X X X

~Q. Registro tipo PLIEGOS. X X X

~W. Registro tipo AMBITO GEOGRÁFICO. X X X

~G. Registro tipo INFORMACION GRAFICA. X X X

~E. Registro tipo ENTIDAD. X X

~O. Registro tipo RELACION COMERCIAL. X X X

~X. Registro tipo INFORMACION TECNICA. X X X

~M. Registro tipo MEDICIÓN. X X X

~N. Registro tipo AÑADIR MEDICIÓN X X X

~A. Registro tipo CLAVES. X X X

~B. Registro tipo CAMBIO DE CÓDIGO. X X X

~F. Registro Tipo DOCUMENTO ADJUNTO. X X X

Anexo 3. API ESTÁNDAR para descripciones X X X

paramétricas compiladas en DLL

Anexo 4. Clasificación en tipos de los Conceptos X X X

Anexo 2. Descripción paramétrica: Formato ESTÁNDAR.


Un concepto paramétrico es el que define su CÓDIGO, resumen, texto, pliego,
descomposición e INFORMACION comercial de forma paramétrica, esto es, de una
forma variable mediante tablas y expresiones aritméticas y lógicas función de
parámetros.

En la descripción paramétrica se encuentran las siguientes sentencias:

Se definen las variables:


%A %B %C %D Parámetros seleccionados del concepto, de "a" a "z" ~ 1 a 26.

%O %P %Q %R Parámetros seleccionados de la obra, de "a" a "z" ~ 1 a 26.

%E Variable que define las condiciones de error.

$A $B $C $D Textos de los parámetros seleccionados del concepto.

$O $P $Q $R Textos de los parámetros seleccionados de la obra.

$E Variable que define los textos de error.

Especificación FIEBDC-3/2004 / 501


De forma equivalente las variables %O a %R y $O a $R tomarían el valor
correspondiente a los valores de los parámetros generales de la obra.

Cualquier variable de la 'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se
puede definir o redefinir con cualquier número de dimensiones para ser utilizada
posteriormente en expresiones.

Se definen las constantes de la 'a' a la 'z' con los valores numéricos del 1 al 26
respectivamente, para permitir referenciar los parámetros de forma nemotécnica.
Para la utilización de otro tipo de caracteres, se determinará en el texto de la opción
del parámetro seleccionado el carácter de sustitución que se desea utilizar,
anteponiéndole un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se
realiza relacionando el carácter con la posición que ocupa.

Ejemplo: PBPO.2$ M3 Hormigón $B $A


\ CONSISTENCIA \ plástica \ fluida \ blanda \

\ RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \

El derivado PBPO.2aa sería: M3 Hormigón H-125 plástica

Con el carácter especial:

\ CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \

\ RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \

El mismo derivado sería: PBPO.2p2 M3 Hormigón H-125 plástica.

Las variables numéricas deben permitir valores reales en coma flotante de doble
precisión (64bits) y las variables alfanuméricas deben poder almacenar textos de
cualquier tamaño.

Cualquier variable puede definirse, en la misma asignación, con cualquier número


y tamaño de dimensiones (hasta 4), en la DEFINICION de dimensiones tendrán que
hacerse explícitas todas las dimensiones.
%U=...... # define una variable con un dato numérico

$X(8)=..... # define una lista de 8 datos alfanuméricos

%V(3,4)= ..... # define una tabla con 3 filas y 4 columnas de datos n.

Las variables %E y $E son especiales para devolver errores producidos por selecciones
de parámetros no coherentes. En una evaluación secuencial de expresiones, si en
una expresión la variable %E adopta un valor distinto de 0, ha habido algún error, se
interrumpe la evaluación de expresiones y se presenta el contenido de la variable $E
donde se almacena el texto del error producido.

Pueden haber múltiples asignaciones de %E, cada una de ellas precedida de su


correspondiente texto de error, asignación de $E.

Las constantes alfanuméricas se definirán entre comillas ($I="incluida parte


proporcional").

En la descripción paramétrica podemos encontrar los siguientes tipos de sentencias:

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 502


SENTENCIA DE RÓTULOS DE PARÁMETRO:

\ <ROTULO del parámetro> \ { <ROTULO de la opción> \ }

Los parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el


orden que se encuentren.

SENTENCIA DE ASIGNACIÓN NUMÉRICA:

<variable numerica> = <expresión numérica>

SENTENCIA DE ASIGNACIÓN ALFANUMÉRICA:

<variable alfanumerica> = <expresión alfanumérica>

SENTENCIA DE RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)

<texto de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ] Se


pueden definir uno u opcionalmente dos rendimientos, el defecto del
rendimiento opcional es 1.

SENTENCIA DE MEDIOS AUXILIARES:

%: <expresión numérica> (en tanto por cien)

%%: <expresión numérica> (en tanto por uno)

SENTENCIA DE PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>

En caso de figurar conjuntamente un juego de sentencias de rendimiento a modo


de descomposición y una sentencia de precio, tendrá prioridad la sentencia de
precio, ignorando las sentencias de rendimiento.

SENTENCIA DE COMENTARIO:

\ COMENTARIO \ ó \ C \ <texto del comentario> \

Si existe texto de comentario, se presentará como ayuda a la selección de


parámetros junto a las opciones de éstos.

SENTENCIA DE SUSTITUCION:
\ RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \

\ TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \

\ PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }

\ CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }

\ COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\

<expresión_numérica>\}

Se considera que una sentencia continua en la línea siguiente si:


Acaba en un operador

Acaba sin cerrar comillas '"'

Especificación FIEBDC-3/2004 / 503


Comienza con '\' y no acaba con '\'

<constantes> PI, números, "texto" ...

<funciones> ABS( ), INT( ), SQRT( ) ...

<variables> [$%] [A-Z] [(dimensión{,dimensión})]

<expresión numérica>:

Son aquellas que dan como resultado un número en función de constantes y


variables numéricas, expresiones lógicas, funciones y operadores.

por ejemplo: %I= %A + 3.17*(1+%B) + ABS(%P+3.15*%Q)/12000

<expresión alfanumérica>:

Son aquellas que dan como resultada un texto en función de constantes y


variables alfanuméricas, operadores y funciones numéricas.

Una expresión alfanumérica puede incluir expresiones lógicas.

por ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)

añadir " de perdidas" a $I si el valor actual de %A es mayor que <a> ó 1.

<expresiones lógicas>:

Son aquellas que dan como resultado VERDADERO o FALSO. En expresiones


numéricas el verdadero se considera como 1 y el falso como 0, en
alfanuméricas el falso se considera suprimir texto.

%I = 323*(%A=a) + 345*(%A=b) + 1523*($I=$A & $J=$B)

$I = "blanco"*(%C=c) + "negro"*(%C=d)

<texto de sustitución>:

En los textos de sustitución la INFORMACION es un texto constante (sin


comillas) con variables embebidas en él. Se consideran variables los
caracteres $ y % inmediatamente seguidos por una letra de la A a la Z.

En los textos de sustitución, las variables alfanuméricas se sustituyen por


sus contenido de texto correspondiente, las numéricas se sustituyen por las
constantes de la "a" a la "z" correspondientes al valor numérico de su
contenido.

En la expresión del rendimiento, la primera parte de la sentencia es un texto


de sustitución que una vez sustituidas las variables será el CÓDIGO del
concepto al que le corresponde la expresión numérica de la segunda parte de
la expresión como rendimiento. Si el resultado es 0, se ignora la sentencia y
no se considera ese componente o línea de descomposición.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 504


CONVENIOS DE NOTACIÓN (EBNF)
[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

[a-b] Indica cualquier valor desde "a" a "b" inclusivas

[abc] Indica cualquiera de los valores a, b ó c

<abc> Indica descripción informal

abc Indica símbolo terminal

%[A-Z] Variable numérica

$[A-Z] Variable alfanumérica

Variables predefinidas:
[%$][ABCD] Parámetros del concepto

[%$][OPQR] Parámetros de la obra

[%$]E Variable especial para reportar errores

[%$][A-Z][(dim{,dim})] Variables definibles

# Comentarios (el texto comprendido entre este carácter y el siguiente

final de línea exclusive, no se tiene en cuenta)

, Separador de datos

: DEFINICION de rendimiento

:: DEFINICION de precio

%: DEFINICION de medios auxiliares en tanto por cien

%%: DEFINICION de medios auxiliares en tanto por uno

OPERADORES NUMÉRICOS (De menor a mayor precedencia)


+ Suma

- Resta

* Multiplicación

/ División

^ Operador elevado a

OPERADORES LÓGICOS (De menor a mayor precedencia)


@ Operador lógico O

& Operador lógico Y

< Menor

> Mayor

<= Menor o igual

>= Mayor o igual

Especificación FIEBDC-3/2004 / 505


= Igual

<> Diferente

! Operador lógico NO

FUNCIONES -- VALOR RETORNADO:


ABS(n) Valor absoluto de "n"

INT(n) Parte entera de "n"

ROUND(n,d) Redondeo de "n" a "d" decimales

SIN(n) Seno (grados sexagesimales)

COS(n) Coseno (grados sexagesimales)

TAN(n) Tangente (grados sexagesimales)

ASIN(n) Arco seno (gs)

ACOS(n) Arco coseno (gs)

ATAN(n) Arco tangente (gs)

ATAN2(x,y) Arco tangente con dos parámetros "x" e "y"

SQRT(n) Raíz cuadrada de "n"

ATOF(a) Conversión de alfanumérico "a" a numérico

FTOA(n) Conversión de numérico "n" a alfanumérico

Cada instrucción irá en distinta línea, a menos que la instrucción acabe en un


operador en cuyo caso se considera que sigue en la siguiente línea.

Si una línea acaba sin haber cerrado las comillas '"' o delimitador '\', se considerará
que sigue en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.

CONTROL DE ERRORES DE SELECCIÓN.


Es frecuente encontrar un gran número de combinaciones de parámetros posibles
pero tener pocas de ellas resueltas. Para evitar que el operador del sistema pruebe
distintas combinaciones de parámetros consiguiendo en todas ellas un mensaje de
error, el sistema debe ser capaz de guiarle en la selección de combinaciones
correctas.

Cada vez que el operador define un parámetro, el sistema evaluará todas las
sentencias posibles y en las sentencias del tipo: %E= ...., función de parámetros

Si todos los parámetros intervinientes en la expresión son conocidos, se evaluará


ésta y si el resultado fuera de ERROR se presentará la previa DEFINICION de $E con
el mensaje del error.

Si todos los parámetros menos uno son conocidos, se irá dando valores al parámetro
desconocido y evaluando la expresión hasta recorrer todos los valores válidos del
parámetro. De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 506


Cada vez que se defina o redefina un parámetro el sistema actualizará todos los
valores marcados en pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de
las opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.

Este sistema de control de errores de selección es sencillo de implementar en


cualquier soporte, pero obliga a los redactores de los descompuestos paramétricos a
definir explícitamente las combinaciones de parámetros incorrectas, ya que con
este método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios
paramétricos.

PROCEDIMIENTO DE LECTURA DE DESCRIPCIONES PARAMÉTRICAS.

Recorrer la descripción paramétrica ejecutando los siguientes pasos:

1. Eliminar desde el carácter '#' inclusive hasta el siguiente cambio de línea


exclusive.

2. Cambiar tabuladores (9) por caracteres ' ' (32)

3. Eliminar caracteres ' ' (32) delante y detrás de los caracteres '\'

4. Unir líneas, eliminando el fin de línea, en líneas que comienzan con '\' y no
acaban con '\', que terminan con un operador y en la separación de datos de una
variable matricial.

5. Eliminar todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o
delimitadas (\...\)

6. Eliminar líneas vacías.

7. Leer y evaluar secuencialmente las sentencias de la forma:

Si la sentencia comienza con '\' leer el RÓTULO hasta el siguiente '\', si el


RÓTULO es:
COMENTARIO ó C- Palabra o carácter reservado que identifica el siguiente

RÓTULO entre '\' como comentario a la selección de parámetros.

RESUMEN ó R- Palabra o carácter reservado que identifica el siguiente RÓTULO

entre '\' como el texto de sustitución del resumen del concepto.

TEXTO ó T- Palabra o carácter reservado que identifica el siguiente RÓTULO

entre '\' como el texto de sustitución del texto descriptivo del concepto.

PLIEGO ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs

entre '\' como los textos de sustitución de las distintas secciones del pliego.

CLAVES ó K- Palabra o carácter reservado que identifica los siguientes

ROTULOs entre '\' como los textos de sustitución de los términos claves

Especificación FIEBDC-3/2004 / 507


asociados al concepto.

COMERCIAL ó F - Palabra o carácter reservado que identifica los siguientes

ROTULOs entre '\' como los textos de sustitución y tarifas de la INFORMACION

comercial del concepto.

Cualquier otro RÓTULO identificará el nombre del siguiente parámetro y los

siguientes ROTULOs entre '\' como los ROTULOs de las opciones de dicho

parámetro.

Si la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.

Si la sentencia comienza con '%:' el resto de la misma debe ser una expresión
numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.

En otro caso si la sentencia contiene el carácter ':' la parte anterior a él es un texto


de sustitución del CÓDIGO de una línea de descomposición y la posterior una
expresión numérica, o dos separadas por ':', indicadoras de el o los rendimientos de
dicha línea de descomposición.

En aquellos casos donde pueda aparecer un carácter ’%’ seguido de un carácter


alfabético que se considere como tal y no como una variable de sustitución, deberá
emplearse ’%%’, para evitar la ambigüedad que se puede producir entre una variable
numérica que deba ser sustituida, una sentencia de medio auxiliar o un texto.

El resto de sentencias deberán ser de asignación de la forma variable/s =


expresión/es

RESUMEN DE TIPOS DE SENTENCIAS


Después de realizado el filtro descrito arriba, cada línea, tira de caracteres acabada
en (ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:
{ \ RÓTULO_parámetro \ { opción_parámetro \ } (13)(10) }

{ variable = expresión (13)(10) }

{ CÓDIGO : rendimiento [ : rendimiento ] (13)(10) }

[ %: ó %%: medios_auxiliares (13)(10) ] % (tanto por cien) %% (tanto por uno)

[ :: expresión_precio (13)(10) ]

[ \ COMENTARIO \ ó \ C \ texto_comentario \ (13)(10) ]

[ \ RESUMEN \ ó \ R \ texto_resumen \ (13)(10) ]

[ \ TEXTO \ ó \ T \ texto_descriptivo \ (13)(10) ]

[ \ PLIEGO \ ó \ P \ { texto_faceta_pliego \ }(13)(10) ]

[ \ CLAVES \ ó \ K \ { término_clave \ }(13)(10) ]

[ \ COMERCIAL \ ó \ F \ { CÓDIGO_producto_comercial \ tarifa \ } (13)(10) ]

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 508


Anexo 3. DESCRIPCIÓN PARAMÉTRICA: API ESTÁNDAR para
descripciones paramétricas compiladas en DLL
INTRODUCCION
Debido a la necesidad expuesta por los desarrolladores de bases de datos
paramétricas de ampliar las posibilidades del lenguaje de descripción paramétrica,
poder compilar éste por eficiencia y protección de datos y posibilitar la protección
contra copia de bases de datos paramétricas, se establece la siguiente
ESPECIFICACION.

En este documento se definen los componentes necesarios para el desarrollo de


descripciones paramétricas en cualquier lenguaje de aplicaciones para Windows (C,
C++, Pascal, Fortran, etc.) y sin ninguna limitación. Se incluye la DEFINICION de un
API ESTÁNDAR en C, un ejemplo de base de datos en formato DLL de 32 bits
desarrollado en C++ y un ejemplo de aplicación con la implementación del interfaz
con el API en C, definidos ambos en Microsoft Visual C++. Se podría implementar el
interfaz con el API para otros compiladores y lenguajes para acceder a las mismas
DLL.

Es decir; es posible construir una base de datos que cumpla este API utilizando para
ello cualquier lenguaje de programación que permita desarrollar librerías de enlace
dinámico Windows (DLL). Asimismo, es posible construir un programa que lea
cualquier base de datos de estas características utilizando lenguajes de aplicaciones
para Windows.

El juego de caracteres utilizado en los textos devueltos por las funciones del API será
el especificado en el registro ‘~V’.

ARCHIVOS QUE DEBE CONTENER UNA BASE DE DATOS


Una base de datos que se desee distribuir con las definiciones paramétricas
compiladas en DLL, debe contener los siguientes archivos:

base.dll En este archivo, único para cada base de datos y de nombre cualquiera
pero extensión ‘.DLL’, se encuentran las funciones del API que la base
de datos ofrece a las aplicaciones para que éstas obtengan la
INFORMACION que contiene la base.

base.bc3 Archivo o archivos ASCII de la base de datos en formato FIEBDC-3/98.


Los registros '~P' de los conceptos cuya descripción paramétrica se
acceda a través del archivo ‘base.dll’, tendrán el campo
‘DESCRIPCIÓN_PARAMÉTRICA’ vacío. El CÓDIGO del concepto de este
registro deberá coincidir con el CÓDIGO del registro ‘~C’
correspondiente y con el CÓDIGO utilizado en las llamadas a las
funciones del API, incluida(s) la(s) posible(s) almohadillas (‘#’). Ejemplo:

~P|ABCD12$| |

El registro '~P' correspondiente al paramétrico global, tendrá el campo


‘DESCRIPCIÓN_PARAMÉTRICA’ vacío, y tendrá un tercer campo con el
nombre del archivo DLL en el que se encuentren las funciones del API
de la base. Ejemplo:

Especificación FIEBDC-3/2004 / 509


~P| | | BASE.DLL |

La DEFINICION paramétrica de los conceptos implementados de esta forma podrá


estar en el mismo archivo que las funciones del API (el archivo ‘base.dll’) o situado
en otro u otros archivos cualesquiera, conforme desee el desarrollador de la base de
datos. Las aplicaciones sólo accederán a las funciones del API incluidas en el
archivo ‘base.dll’, y éstas serán las encargadas de acceder a la INFORMACION en la
forma que el desarrollador de la base implemente.

DEFINICION DEL API: FIEBDC.H


Único archivo que define el ESTÁNDAR. En este archivo se define el API en C, que
las descripciones paramétricas en DLL ofrecen a las aplicaciones. Se recomienda
incluir en las Bases de Datos todas las funciones del API, aunque no se utilicen
todas por la misma. Este interfaz permite definiciones paramétricas de ilimitado
número de parámetros e ilimitadas opciones por parámetro. Se soportan dos modelos
de codificaciones:

1. Un modelo de codificación independiente de parámetros, en el que el CÓDIGO de


un concepto paramétrico es completamente libre y el número de caracteres del
CÓDIGO es independiente del número de parámetros. En este modelo, los códigos
de las familias paramétricas no tienen por qué tener el carácter $.

2. Un modelo dependiente de los mismos. Es el modelo que definía FIEBDC-3/95 y


en el que el CÓDIGO de un concepto paramétrico debe tener un símbolo ‘$’ en su
séptima posición y en el que se asigna de la 'a' a la 'z' las opciones 0 a 25 de cada
parámetro, ampliándose en esta VERSION con los rangos 'A' a 'Z' y '0' a '9' para
que el número de opciones por parámetro en este modelo de codificación pase a
62 (de 0 a 61).

Para que los programas puedan determinar si una base de datos responde a uno u
otro modelo, se ha definido la función BdcCodificacion(), que se especifica más
adelante y que indica si el sistema de codificación usado en la base de datos es
dependiente o independiente.

Si se adopta el primer modelo, no es posible averiguar ‘a priori’, a partir de un


CÓDIGO ‘ABCDEFGHIJ’ de concepto, si éste es un derivado paramétrico ni de que
concepto paramétrico procede o con qué valores de sus parámetros. Por ello, es
establece el siguiente criterio de búsqueda:

1. Si el concepto existe con este CÓDIGO en la base, se escogerá dicho concepto.

2. En caso de no existir, se intentará localizarlo en la base de datos como


perteneciente a un concepto paramétrico ‘al estilo’ FIEBDC-3/95. En el ejemplo,
se intentará buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los parámetros
‘GHIJ’ (que implica pasarle a sus cuatro parámetros valores ‘31’, ‘32’, ‘33’ y ‘34’
respectivamente).

3. En caso de no existir, se intentará localizarlo en la DLL. Si ésta posee un modelo


de codificación dependiente, se utilizará el mismo criterio que en el punto
anterior: en el ejemplo, buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los
parámetros ‘GHIJ’. Si la base posee un modelo independiente, se utilizará la

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 510


función ‘BdcDecodifica()’, tal como se especifica más adelante.

4. Si no se cumplen ninguna de las condiciones anteriores, se supone que el


concepto no existe en la base.

Vea en el archivo ‘fiebdc.h’ adjuntado la definición del API.

ESPECIFICACION DE LAS FUNCIONES DEL API


1. FUNCIONES GENERALES

LONG EXPORTA BdcCodificacion (

VOID

);

Propósito

Indica si la base de datos utiliza un modelo de codificación dependiente o


independiente del número y valor de los parámetros.

Valor devuelto

Devolverá ‘0’ si la codificación sigue un modelo dependiente (al ‘estilo’ FIEBDC-


3/95), y ‘1’ si sigue un modelo independiente.

LONG EXPORTA BdcTipoPliego (

VOID

);

Propósito

Indica qué tipo o tipos de Pliegos de Condiciones están implementados en la base.


Dichos modelos se especifican en el apartado ‘REGISTROS TIPO PLIEGOS’ de las
especificaciones del formato.

Valor devuelto

Devolverá ‘0’ si no está implementado ningún tipo de pliego.

Devolverá ‘1’ si está implementado el modelo uno de textos de pliegos. Es este caso,
se utilizará la función BdcPliego() para obtener los textos de los pliegos.

Devolverá ‘2’ si está implementado el modelo dos de textos de pliegos. En este caso,
se utilizarán las funciones BdcCodigoParrafo() y BdcTextoParrafo() para obtener los
textos de los pliegos.

Devolverá ‘3’ si están implementados tanto el modelo uno como el modelo dos.

LPCSTR EXPORTA BdcFecha (

VOID

);

Especificación FIEBDC-3/2004 / 511


Propósito

Obtener la fecha de la Base de Datos.

Valor devuelto

Devuelve la fecha de la Base de Datos en formato DDMMAAAA, donde DD representa


al día con dos dígitos, MM el mes y AAAA el año.

La propia función es responsable de asignar memoria al puntero. En caso de error, la


función devuelve NULL. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

2. FUNCIONES REFERENTES AL PARAM ÉTRICO GLOBAL

2.1 Accesibles en cualquier momento

2.1.1. Obtención de sus parámetros

LONG EXPORTA BdcGloParNumero (

VOID

);

Propósito

Obtener el número de parámetros de concepto paramétrico global.

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve


-1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcGloError().

LONG EXPORTA BdcGloOpcNumero (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de


producirse un error, devuelve –1. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcGloError().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 512


LPCSTR EXPORTA BdcGloParRotulo (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloOpcRotulo (

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Propósito

Obtiene el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto paramétrico global.

opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’
el número de opciones que posee el parámetro ‘par’ del concepto
paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcGloError().

Especificación FIEBDC-3/2004 / 513


2.1.2. Mensajes / CODIGOs de error

LONG EXPORTA BdcGloError (

LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene el tipo de error producido. Una vez leído, se inicializa el CÓDIGO


de error.

Parámetros

err: Puntero a un puntero constante ‘far’ a una cadena de caracteres.


En él se almacena el mensaje de error referente al error
producido. La función es responsable de asignar memoria al
puntero. Si no existe un mensaje definido para el error existente,
‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el CÓDIGO de error producido. Vea al final el apartado


‘CODIGOs de los mensajes de error’ para más INFORMACION.

2.1.3. Asignación de opciones a los parámetros

BOOL EXPORTA BdcGloCalcula (

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Asigna los valores de los parámetros del concepto paramétrico global..

Parámetros

opcl: Puntero a un vector (array) de LONGs con las opciones que se


desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, devuelve ‘-1’.


Para obtener más INFORMACION sobre el error producido, llame a la
función BdcGloError().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 514


3. FUNCIONES REFERENTES AL RESTO DE PARAM ÉTRICOS

3.1. Accesibles en cualquier momento

3.1.1. Lectura de un concepto paramétrico

HANDLE EXPORTA BdcLee (

LPCSTR cod // CÓDIGO del concepto

);

Propósito

Lee el concepto paramétrico identificado por ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto paramétrico a leer. Si se utiliza un modelo de
codificación dependiente, se asume que dicho CÓDIGO tenga 7
caracteres y que el séptimo sea ‘$’. Dentro del CÓDIGO, los
caracteres pueden ser cualesquiera salvo el 0x00 (que indica el
final del CÓDIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe el paramétrico, la función devuelve
cero.

3.1.2. Lectura de un concepto paramétrico a partir del CÓDIGO completo del


derivado

HANDLE EXPORTA BdcDecodifica (

LPCSTR cod, // CÓDIGO completo del derivado paramétrico

LPLONG opcl // puntero al espacio de memoria a

); // rellenar con las opciones

Propósito

Lee el concepto paramétrico al que pertenece el concepto de CÓDIGO


‘cod’. El HANDLE y las opciones ‘opcl’ devueltas se pueden utilizar
directamente en una llamada a BdcCalcula().

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto del que se desea obtener el concepto paramétrico a la
que pertenece. Dentro del CÓDIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CÓDIGO).

opcl: Puntero a un vector (array) de LONGs en el que la función

Especificación FIEBDC-3/2004 / 515


devolverá las opciones a las que corresponda el derivado
paramétrico. El array debe estar previamente dimensionado con al
menos el número de parámetros del concepto. Las opciones se
numeran empezando por cero.

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe ningún concepto paramétrico del
que el concepto ‘cod’ es derivado, la función devuelve cero.

LPCSTR EXPORTA BdcFamilia (

LPCSTR cod) // CÓDIGO completo del derivado paramétrico

Propósito

Lee el código del concepto paramétrico al que pertenece el concepto de


CÓDIGO ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CÓDIGO


del concepto del que se desea obtener el concepto paramétrico al
que pertenece. Dentro del CÓDIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CÓDIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna su código como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero.. En caso de error, o si no
existe ningún concepto paramétrico del que el concepto ‘cod’ es derivado,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

3.1.3. Mensajes / CODIGOs de error

LONG EXPORTA BdcError (

HANDLE h, // identificador del concepto

LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene tipo de error producido.

Parámetros

h: Identificador (HANDLE) del concepto, que debe ser obtenido en una


llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 516


err: Puntero a un puntero constante ‘far’ a una cadena de caracteres.
En él se almacena el mensaje de error referente al error
producido. La función es responsable de asignar memoria al
puntero. Si no existe un mensaje definido para el error existente,
‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el CÓDIGO de error producido. Vea al final el apartado


‘CODIGOs de los mensajes de error’ para más INFORMACION.

3.2. Accesibles después de BdcLee

3.2.1. Obtención de sus parámetros

LONG EXPORTA BdcParNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de parámetros de concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve


-1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

LONG EXPORTA BdcOpcNumero (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Especificación FIEBDC-3/2004 / 517


Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de


producirse un error, la función devuelve -1. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcParRotulo (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcOpcRotulo (

HANDLE h, // identificador del concepto

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Propósito

Obtiene rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 518


opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’
el número de opciones que posee el parámetro ‘par’ del concepto.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError(). En caso de referirse a
ámbitos territoriales y a divisas, véanse los anexos 5 y 6.

3.2.2. Obtención de un comentario

LPCSTR EXPORTA BdcComentario (

HANDLE h, // identificador del concepto

);

Propósito

Obtiene un texto de comentario del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el comentario del concepto, como puntero constante ‘far’ a una


cadena de caracteres. La propia función es responsable de asignar
memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcError().

3.2.3. Asignación de opciones de los parámetros y validación o cálculo del


derivado

BOOL EXPORTA BdcValida (

HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Averigua si una determinada combinación paramétrica es correcta o no.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Especificación FIEBDC-3/2004 / 519


opcl: Puntero a un vector (array) de LONGs con las opciones que se
desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.

Valor devuelto

Devuelve ‘0’ si la combinación es correcta. En caso contrario, devuelve ‘-


1’. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

BOOL EXPORTA BdcCalcula (

HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Calcula los datos correspondientes a un derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a un vector (array) de LONGs con las opciones que se


desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, o de que la


combinación no sea correcta, devuelve ‘-1’. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LONG EXPORTA BdcValidos (

HANDLE h, // identificador del concepto

LPBYTE *opcl, // lista de opciones de los parámetros de todos los


derivados válidos

);

Propósito

Obtiene las opciones de cada parámetro de todos los derivados


paramétricos válidos de la familia paramétrica. Si no se desea
implementar esta función en una determinada familia, la función
deberá devolver ‘0’. Está pensada para aquellas familias que posean un
número elevado de combinaciones posibles, en las que el averiguar
cuales de ellas son válidas mediante sucesivas llamadas a las funciones
BdcCalcula() o BdcValida() es muy costoso en tiempo. En una sola llamada

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 520


a esta función es posible, en estos casos, obtener todas las
combinaciones válidas.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a una matriz (array) bidimensional de BYTEs a rellenar


por la función, en el que cada columna corresponde a un derivado
paramétrico válido, y cada fila corresponde a los valores de cada
uno de los parámetros. La matriz se devuelve al estilo de ‘C’; es
decir, por columnas. Las opciones se numeran empezando por
cero. La propia función es responsable de asignar memoria al
puntero. La memoria asignada en bytes será el número de
combinaciones válidas multiplicado por el número de parámetros.

Valor devuelto

Devuelve el número de derivados paramétricos válidos. En caso de que


dicha información no esté disponible, devuelve ‘0’. En caso de error,
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido,
llame a la función BdcError().

Ordenación

Las combinaciones válidas a devolver se ordenarán teniendo en cuesta


que el primer parámetro tiene más precedencia que el segundo, éste que
el tercero, y así sucesivamente.

Ejemplo

Si una familia paramétrica tiene 3 parámetros, con 9, 10 y 11 opciones


por parámetro respectivamente, el número total de combinaciones
posibles es 9x10x11 = 990. Si son válidas sólo las siguientes cuatro
(escritos en el orden especificado en el párrafo anterior):

1. Valores ‘0’, ‘5’, y ‘9’ de los parámetros uno al tres, respectivamente.

2. Valores ‘7’, ‘6’ y ‘5’ de los parámetros uno al tres, respectivamente.

3. Valores ‘8’, ‘2’ y ‘4’ de los parámetros uno al tres, respectivamente.

4. Valores ‘8’, ‘2’ y ‘10’ de los parámetros uno al tres, respectivamente.

Entonces la función devolverá los 4x3=12 bytes siguientes: 0, 5, 9, 7, 6, 5,


8, 2, 4, 8, 2 y 10.

3.2.4. Liberación de memoria

LONG EXPORTA BdcInValidos (

HANDLE h, // identificador del concepto

LPBYTE *opcl, // lista de opciones de los parámetros de todos los

Especificación FIEBDC-3/2004 / 521


derivados inválidos

);

Con el mismo propósito y parámetros que BdcValidos.

Esta función se implementará en lugar de aquella cuando no exista


BdcValidos para un concepto paramétrico y viceversa.

BOOL EXPORTA BdcCierra (

HANDLE h // identificador del concepto

);

Propósito

Cierra el concepto paramétrico y libera la memoria asignada.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve ‘0’ si realiza la operación correctamente. En caso de error, la


función devuelve ‘-1’. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

3.3. Accesibles después de BdcCalcula

3.3.1. Obtención del derivado paramétrico

LONG EXPORTA BdcDesNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de conceptos en los que se descompone el derivado


paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de elementos de su descomposición. Un valor de


cero indicará que el concepto no tiene descomposición. Es posible que un
mismo concepto paramétrico posea derivados simples y compuestos. En

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 522


caso de error, la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcDesCodigo (


HANDLE h, // identificador del concepto

LONG des // número del elemento de la descomposición

);

Propósito

Obtiene el CÓDIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

Valor devuelto

Devuelve el CÓDIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcFactor (


HANDLE h, // identificador del concepto

LONG des, // número del elemento de la descomposición

double FAR *factor // factor a obtener

);

Propósito

Obtiene el factor de rendimiento del elemento número 'des' en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

*factor: Puntero en el que devolver el factor deseado, por defecto 1. El


factor puede ser positivo, cero o negativo.

Especificación FIEBDC-3/2004 / 523


Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, el factor se


asigna a cero y la función devuelve '-1'. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcRendimiento (


HANDLE h, // identificador del concepto

LONG des, // número del elemento de la descomposición

double FAR *ren // rendimiento a obtener

);

Propósito

Obtiene el rendimiento del elemento número ‘des’ en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

*ren: Puntero en el que devolver el rendimiento deseado. El


rendimiento puede ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el


rendimiento se asigna a cero y la función devuelve ‘-1’. Para obtener
más INFORMACION sobre el error producido, llame a la función BdcError
().

BOOL EXPORTA BdcPrecio (

HANDLE h, // identificador del concepto

double FAR *pre // precio unitario a devolver

);

Propósito

Obtiene el precio unitario en el caso de que el derivado paramétrico sea


un simple. Es posible que un mismo concepto paramétrico tenga como
derivados tanto simples como compuestos.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 524


*pre: Puntero en el que devolver el precio unitario. Dicho precio puede
ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el precio se


asigna a cero y la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodigo (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el CÓDIGO del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el CÓDIGO del concepto, como puntero constante ‘far’ a una


cadena de caracteres. Si se ha calculado un derivado paramétrico (se ha
llamado a BdcCalcula), este CÓDIGO será el del derivado paramétrico. En
caso contrario, será el CÓDIGO del concepto paramétrico. La propia
función es responsable de asignar memoria al puntero. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcUnidad (

HANDLE h // identificador del concepto

);

Propósito

Obtiene la unidad de medida del derivado paramétrico. Esta función


permite que un concepto paramétrico pueda generar elementos
derivados con distintas unidades de medición. Para que dicha función
actúe, el registro ~C debe contener el carácter especial ‘*’ dentro del
campo unidad de medida. Dicho carácter indica que la unidad de medida
de los conceptos derivados los debe proporcionar el API. Si el redactor de
la BD desea que la unidad de medida sea un valor a escoger por parte del
usuario, deberá además añadirse la unidad de medida como una
propiedad más del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser

Especificación FIEBDC-3/2004 / 525


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto correspondiente a la unidad de medida del derivado


paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido un texto resumido, la función devuelve la cadena vacía “”.
En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcResumen (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto resumido del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto resumido del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un
texto resumido, la función devuelve la cadena vacía “”. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTexto (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto completo de descripción del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto completo de descripción del derivado paramétrico, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 526


texto completo de descripción, la función devuelve la cadena vacía “”. En
caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

VOID EXPORTA BdcTipoDescripcion (

LONG tipo // tipo de descripción

);

Propósito

Indica qué tipo de descripción se va a obtener de un concepto derivado.

Parámetros

Tipo: Se refiere a las diferentes descripciones (obtenidas con


BdcResumen y BdcTexto) que puede tener un concepto derivado en
función de los diferentes contenidos de que trate la base de datos.

Valor '0': Descripción por defecto de un derivado paramétrico.

Valor '1': Descripción de un derivado paramétrico que contiene


insertados uno o varios códigos de conceptos que intervienen en
su descomposición. Dichos códigos aparecen indicados entre
dólares ($). Esta opción sirve para que los programas puedan
particularizar la descripción de un concepto derivado cuando se
han proporcionado productos comerciales asociados a sus
componentes (con BdcComercNumero y BdcComercCodigo, o con
el registro ~O).

Ejemplo: BdcTexto del concepto derivado E612235K.

Devolución de BdcTexto con valor 0 para BdcTipoDescripcion: Inodoro con


tapa.

Devolución de BdcTexto con valor 1 para BdcTipoDescripcion: Inodoro


$B1234567$ con tapa $B7654321$.

LPCSTR EXPORTA BdcPliego (

HANDLE h, // identificador del concepto

LONG formato, // identificador del formato

LONG tipo, // especifica si el pliego a obtener es de la familia o del


derivado

LPCSTR sección, // código de la sección del pliego

LPCSTR ámbito // abreviatura del ámbito

);

Especificación FIEBDC-3/2004 / 527


Propósito

Obtiene el texto del pliego, según el modelo uno.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

formato: Identificador del formato de texto. Se definen, por el momento,


los siguientes formatos: ‘BDCFMT_ASCII’ (si se desea obtener el
pliego en formato ASCII), ’BDCFMT_ANSI’ (si se desea obtener el
pliego en formato ANSI), ‘BDCFMT_RTF’ (si se desea obtener el
pliego en formato RTF) y ‘BDCFMT_HTM’ (si se desea obtener el
pliego en formato HTM).

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Puede tomar como valor el código de la sección del pliego cuyo
texto se desea obtener, en cuyo caso deberá ser una de las
secciones especificadas en el registro ~L, según se indica en el
apartado ‘REGISTROS TIPO PLIEGOS’ de la especificaciones del
formato. Si no existen secciones definidas, el valor de este
parámetro no es utilizado. Si por el contrario toma el valor NULL,
la función devolverá los códigos de las secciones del pliego para
los que el concepto posea texto del pliego, separados por el
separador de subcampos ('\').

ámbito: Ámbito del cual se desea obtener el texto del pliego. Corresponde
a uno de los campos ‘ABREV_AMBITO’ especificados en el registro
~W, según se indica en el apartado ‘REGISTRO TIPO ÁMBITO
GEOGRÁFICO’ de las especificaciones del formato. Si no existen
ámbitos definidos (no existe un registro ~W), el valor de este
parámetro es ignorado. En ese caso, es posible que el ámbito sea
un parámetro global de la base.

Valor devuelto

Si el parámetro sección contiene el código de la sección del pliego cuyo


texto se desea obtener, la función devuelve el texto del pliego del derivado
paramétrico en el formato solicitado, como puntero constante ‘far’ a una
cadena de caracteres. Si no existe definido un texto de pliego, la función
devuelve la cadena vacía “”.

Cuando el parámetro sección es NULL, la función devuelve los rótulos de


los pliegos existentes asociados al concepto paramétrico en el formato
{rotulo\}, si no hubiera rótulos asociados al concepto la función devuelve
"".

La propia función es responsable de asignar memoria al puntero. En

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 528


caso de error (por ejemplo formato no soportado por la BDC), la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodParrafo (

HANDLE h, // identificador del concepto

LONG tipo, // especifica si el pliego a obtener es de la


familia o del derivado

LPCSTR sección, // código de la sección del pliego

LPCSTR ámbito // abreviatura del ámbito

);

Propósito

Obtiene los códigos de los párrafos de pliego, según el modelo dos.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Código de la sección del pliego cuyos códigos de párrafo se desea


obtener. Deberá ser una de las secciones especificadas en el
registro ~L, según se indica en el apartado ‘REGISTROS TIPO
PLIEGOS’ de la especificaciones del formato. Si no existen
secciones definidas, el valor de este parámetro no es utilizado.

ámbito: Ámbito del cual se desea obtener los códigos de párrafo.


Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados
en el registro ~W, según se indica en el apartado ‘REGISTRO
TIPO ÁMBITO GEOGRÁFICO’ de las especificaciones del formato.
Si no existen ámbitos definidos (no existe un registro ~W), el
valor de este parámetro es ignorado. En ese caso, es posible que
el ámbito sea un parámetro global de la base.

Valor devuelto

Devuelve un texto con los códigos de párrafo del pliego del derivado
paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido ningún código de párrafo, la función devuelve la cadena
vacía “”. En caso de error (por ejemplo ámbito no soportado por la BDC), la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError(). Los códigos irán separados con el

Especificación FIEBDC-3/2004 / 529


separador de subcampos habitual, es decir, el texto devuelto tendrá la
sintaxis

{ CÓDIGO_PARRAFO \ }

LPCSTR EXPORTA BdcTexParrafo (

LONG formato // identificador del formato

LPCSTR cod_parrafo // código del párrafo del pliego

);

Propósito

Obtiene el texto del pliego del derivado paramétrico correspondiente al


código de párrafo ‘cod_parrafo’, según el modelo dos. El código de párrafo
se obtiene mediante una llamada a la función BdcCodParrafo.

Parámetros

formato: Identificador del formato de texto. Se definen, por el


momento, los siguientes formatos: ‘BDCFMT_ASCII’ (si se
desea obtener el pliego en formato ASCII), ‘BDCFMT_RTF’ (si
se desea obtener el pliego en formato RTF) y
‘BDCFMT_HTM’ (si se desea obtener el pliego en formato
HTM).

cod_parrafo Código del párrafo del pliego cuyo texto se desea obtener.

Valor devuelto

Devuelve el texto del párrafo en el formato solicitado, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Esta memoria se liberará en
la siguiente llamada a esta función dentro del mismo proceso. Si no
existe definido un texto de pliego con este código de párrafo, la función
devuelve la cadena vacía “”. En caso de error (por ejemplo formato no
soportado por la BDC), la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcClaves (

HANDLE h // identificador del concepto

);

Propósito

Obtiene las claves de tesauro del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 530


Valor devuelto

Devuelve las claves de tesauro del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres, con el mismo formato que el
registro ‘~A’, es decir, ‘{CLAVE_TESAURO\}’. La propia función es
responsable de asignar memoria al puntero. Si no existen definidas
claves del tesauro, la función devuelve la cadena vacía “”. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTipo (

HANDLE h, // identificador del concepto

);

Propósito

Obtener el tipo del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el tipo del concepto, como puntero constante 'far' a una cadena
de caracteres. Si se ha calculado un derivado paramétrico (se ha llamado
a la función BdcCalcula) este tipo será el del derivado paramétrico. En
caso contrario, será el tipo del concepto paramétrico. La propia función
es responsable de asignar memoria al puntero. En caso de error, la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError(). Corresponde al campo TIPO del
registro ~C.

LONG EXPORTA BdcComercNumero(

HANDLE h // identificador del concepto

LPCSTR codigo_raiz_BD // identificador de la entidad que


elabora la BD

);

Propósito

Obtener el número de conceptos vinculados a un concepto que pertenece


a codigo_raiz_BD y empleado por ésta en su sistema de clasificación por
codificación.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

Especificación FIEBDC-3/2004 / 531


codigo_raiz_BD: Se refiere a la identificación del CÓDIGO de la entidad
que elabora la BD. Este CÓDIGO debe ser facilitado por la entidad que
elabora la BD, para evitar ambigüedades. Se recomienda que éste sea el
propio CIF de la entidad.

Valor devuelto

Devuelve el número de conceptos vinculados. Si se ha calculado un


derivado paramétrico (se ha llamado a la función BdcCalcula) este
número será el del derivado paramétrico. En caso contrario, será el
número del concepto paramétrico. Un valor de cero significa que no tiene
conceptos vinculados. En caso de error la función devuelve '-1' . Para
obtener más INFORMACIÓN sobre el error producido, llame a la función
BdcError().

BOOL EXPORTA BdcComercCodigo(

HANDLE h // identificador del concepto

LONG comerc // número del concepto vinculado

LPLCSTR *Codigo_archivo LPCSTR Codigo_archivo // nombre


de archivo a devolver

LPLCSTR *Codigo_Entidad LPCSTR Codigo_Entidad //


identificación del código de la entidad a la que se asocia

// la información a devolver

LPLCSTR *Codigo_Concepto LPCSTR Código_Concepto //


concepto que pertenece a Codigo_Entidad a devolver

);

Propósito

Obtener el código de archivo que indica el lugar donde se encuentra la


información referente a codigo_entidad#codigo_concepto, o bien el
codigo_entidad y el codigo_concepto que se encuentra en la misma BD.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

comerc: Número del concepto vinculado. Los conceptos vinculados se


numeran empezando por cero.

codigo_archivo: Se refiere al nombre del archivo que, de existir, indica el


lugar donde se encuentra la información referente a
codigo_entidad#código_concepto. Si el valor es nulo los
campos código entidad y código concepto deberán existir.
La propia función es responsable de asignar memoria al
puntero.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 532


codigo_entidad: Se refiere a la identificación del CÓDIGO de la entidad a
la que se le asocia INFORMACION. Este CÓDIGO debe ser
facilitado por la entidad que elabora la BD, de acuerdo con
su sistema de clasificación, para evitar ambigüedades. Se
recomienda que éste sea el propio CIF de la entidad. La
propia función es responsable de asignar memoria al
puntero.

codigo_concepto: Se refiere a un concepto que pertenece a


CÓDIGO_ENTIDAD, y empleado por la entidad que elabora
la BD. Cuando CÓDIGO_CONCEPTO se refiera a un
producto comercial, dicho CÓDIGO deberá ser facilitado
por el fabricante, y no podrá coincidir nunca con la
designación de CÓDIGO_RAIZ_BD, CÓDIGO_ENTIDAD o
CÓDIGO_CONCEPTO, cuando éste se refiere a un
concepto genérico. La propia función es responsable de
asignar memoria al puntero.

Al tener dicho producto comercial un tratamiento de CONCEPTO, éste


puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica,
etc.). Para poder utilizar los registros mencionados, el código
identificador del concepto será CÓDIGO_ENTIDAD #
CÓDIGO_CONCEPTO.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, la función


devuelve '-1'. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

LONG EXPORTA BdcDocNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtener el número de archivos asociados a un concepto.

Parámetros

h: Identificador (HANDLE) del concepto.

Valor devuelto

Devuelve el número de archivos asociados. Un valor de cero significa que


no tiene archivos asociados. En caso de error la función devuelve '-1' .
Para obtener más INFORMACIÓN sobre el error producido, llame a la
función BdcError()

BOOL EXPORTA BdcDocCodigo (

Especificación FIEBDC-3/2004 / 533


HANDLE h, // identificador del concepto.

LONG num, // número del archivo asociado.

LONG * tipo // clasificación del tipo de información del


archivo.

LPCSTR * archivo, // nombre del archivo que contiene


información del concepto.

LPCSTR * descripción // descripción de la información que


contiene el archivo.

);

Propósito

Obtener el archivo asociado a un concepto así como su clasificación


temática y su descripción asociada.

Parámetros

h: Identificador (HANDLE) del concepto.

num: Número del archivo asociado al concepto. Se numeran empezando


por cero.

tipo: Devuelve el código de uno de los tipos enumerados en el registro ~F.

archivo: Devuelve el nombre del archivo con extensión que contiene


información del concepto. Las extensiones permitidas son las
que se especifican en el registro ~F. En el caso que se devuelvan
varios archivos, el primero de los archivos es el principal y el
resto son vinculados. En este caso el formato del string sería el
siguiente: “archivo 1 | ... | archivo n | ”

descripción: Devuelve una breve descripción de la información contenida


en el archivo. devuelve NULL si no hay ningún texto
descriptivo asociado.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, la función


devuelve '-1'. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

4. M ENSAJES DE ERROR

Los CODIGOs de error se almacenan en un LONG (entero de 32 bits) de manera que


cada error corresponde a un bit. De esta forma, es posible definir hasta 32 CODIGOs
de error que pueden producirse de forma aislada o conjunta. Las llamadas a las
funciones BdcGloError() y BdcError() eliminan los CODIGOs de error producidos
anteriormente.

Por ejemplo, para saber si un determinado error se ha producido con el concepto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 534


‘Concepto’, se debe utilizar la sintaxis:
const char *Mensaje;

LONG cod_err = BdcError ((HANDLE)Concepto, &Mensaje);

if (cod_err & BDCERR_BASE_DATOS) {

// Se ha producido el error ‘BDCERR_BASE_DATOS’

...

4.1. CÓDIGOS de los mensajes de error

BDCERR_CORRECTO No hay error.

BDCERR_BASE_DATOS Existe un mensaje de error. Es el caso en el que la

DEFINICION paramétrica se indica una

combinación inválida y se devuelve un mensaje de

error explicativo.

BDCERR_PARAMETRO Se pasó a BdcCalcula o BdcGloCalcula un

parámetro inexistente.

BDCERR_OPCION Se pasó a BdcCalcula o BdcGloCalcula una opción

inexistente.

BDCERR_MAX_OPCIONES Se definieron más de 62 opciones en un

determinado parámetro.

BDCERR_NO_LEIDO Se intentó utilizar BdcCalcula() antes que BdcLee().

BDCERR_NO_CALCULADO Se intentó acceder a datos de un derivado

paramétrico antes de utilizar BdcCalcula().

BDCERR_DESCOMPOSICION Se intentó acceder a un elemento de la

descomposición inexistente.

BDCERR_SIN_CÓDIGO No existe CÓDIGO definido.

BDCERR_SIN_MEMORIA Memoria insuficiente.

BDCERR_CONCEPTO_NULO Se pasó un HANDLE nulo.

BDCERR_FMT_NO_SOPORTADO El formato de texto solicitado no está

soportado por la BDC

BDCERR_NO_COMBINACION A la llamada BdcValida o BdcCalcula se le pasó una

combinación inexistente.

BDCERR_NO_BANCO_PRECIOS No existe ningún Banco de Precios.

BDCERR_PARAMETRO_INCORRECTO “El programa pidió un parámetro

Especificación FIEBDC-3/2004 / 535


incorrecto”

EJEM PLOS

1. BASE DE DATOS EJEMPLO: BASE.DLL

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto los
archivos que constituyen la base como los fuentes necesarios para construirla
(compilarla).

El ejemplo construido posee las siguientes características (no todas las bases que se
realicen conforme a este formato deben tener estas mismas características):
1. Se ha utilizado un modelo de codificación independiente de los parámetros.

2. Se ha utilizado el modelo uno de textos de pliegos.

3. Existe un paramétrico global, si bien el valor de su único parámetro sólo es

utilizado en el concepto ‘SBRG.1$’.

4. Existe un concepto (‘Esp$’) que no responde a los criterios de FIEBDC-3/95:

posee más de cuatro parámetros y el código de la familia sólo tiene 4 caracteres.

5. Todos los conceptos paramétricos poseen un CÓDIGO terminado en ‘$’, si bien el

formato no lo exige.

6. Existe un concepto (‘SBRG.1$’) cuyos derivados poseen un código que no

responde a los criterios de FIEBDC-3/95. Para la asignación de código se ha seguido

la técnica de definir una tabla de sinónimos: así, el concepto que resulta de escoger

el primer valor del único parámetro que posee, en lugar de poseer el código

‘SBRG.1a’ posee el código ‘SBRG.1_18’.

7. Los textos de los pliegos sólo están definidos en formato ASCII y para los

derivados paramétricos. No están divididos ni en secciones (facetas) ni en ámbitos.

1.1. Archivos para la distribución de la Base de Datos.

Para distribuir la base datos que se construyera con este ejemplo, se


deberían proporcionar los siguientes archivos:

base.dll DLL que contiene las descripciones paramétricas y el interfaz


ESTÁNDAR con aplicaciones (API).

base.bc3 Archivo ASCII de la base de datos en formato FIEBDC-3/98. En


el ejemplo, la base incluye en esta DLL el paramétrico global de
la base, así como las descripciones paramétricas de los
conceptos “ABPH.1$”, “SBRG.1$”, “EADR.3$” y “Esp$”, por lo que
al menos debe contar con los siguientes registros:
~P| | | BASE.DLL |

~P| ABPH.1$ | |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 536


~P| SBRG.1$ | |

~P| EADR.3$ | |

~P| Esp$ | |

1.2. Archivos necesarios para la CONSTRUCCIÓN de la Base de Datos.

Este ejemplo está preparado para compilarse con Microsoft Visual C++
VERSION 2.2 o posterior como DLL de 32 bits. Sin apenas modificaciones,
sería posible compilarlo como DLL de 16 bits o utilizar el compilador Borland
C++.

Para construir la DLL, son necesarios los siguientes archivos:

fiebdc.h Archivo que define el formato.

base.h DEFINICION de variables y defines útiles para la definición de


las descripciones paramétricas.

interfaz.cpp Implementación de las funciones del API.

aplicat.cpp Implementación de las funciones de la descripción


paramétrica.

base.cpp Implementación de las descripciones paramétricas de la base


de datos en formato C++. Es la única parte que escribirían los
redactores de las bases de datos. Se ha utilizado una sintaxis
similar a la descripción paramétrica del formato FIEBDC-3/95,
para facilitar así el intercambio entre ambos formatos.

base.def DEFINICION de las funciones de exportación del API.

2. APLICACIÓN EJEMPLO: PROGRAMA.EXE

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto el
ejecutable (‘Programa.EXE’) como los fuentes necesarios para construirlo (compilarlo).

Esta sencilla aplicación, lee los conceptos que se incluyen en el propio fuente de la
base BASE.DLL (en una aplicación real, los conceptos se definen en los registros ~P
de base.bc3), y escribe en el archivo 'SALIDA.TXT' los rótulos de todos sus parámetros
así como todos los datos de todas sus combinaciones paramétricas.

Los fuentes son fácilmente modificables para poder probar con el programa cualquier
base de datos que utilice paramétricos compilados en DLL de acuerdo con el API
establecido en este documento.

2.1. Archivos necesarios para la CONSTRUCCIÓN del programa ejemplo.

Este ejemplo está preparado para compilarse con Microsoft Visual C++
VERSION 2.2 o posterior como aplicación Windows 95 de 32 bits en modo
consola. Sin apenas modificaciones, sería posible compilarlo como aplicación
de 16 bits o utilizar el compilador Borland C++.

Para construir la aplicación, son necesarios los siguientes archivos:

Especificación FIEBDC-3/2004 / 537


fiebdc.h Archivo que define el formato.

program.h Declaración de variables y funciones.

program0.c Funciones auxiliares de apertura y cierre de la base de

datos y tratamiento de los mensajes de error.

program.c Programa ejemplo.

Anexo 4. Clasificación en tipos de los Conceptos


Tipos 0, 1, 2 y 3.

Estos tipos corresponden a los vigentes en los formatos FIEBDC-3/95 y FIEBDC-3/98.


-0 Sin clasificar

-1 Mano de obra

-2 Maquinaria

-3 Materiales

Tipos obtenidos de los índices y fórmulas polinómicas de revisión de precios del


BOE y de la CNC.

Esta clasificación proviene del BOE (Boletín Oficial del Estado: http://www.boe.es/) y
de la CNC (Confederación Nacional de la Construcción: http://www.cnc.es/), que la
utilizan para fijar los índices de variación de precios mediante sus respectivas
fórmulas polinómicas.
-H Mano de obra

- MC Cemento

- MCr Cerámicas

- MM Maderas

- MS Siderúrgicos

- ME Energía

- MCu Cobre

- Mal Aluminio

- ML Ligantes

A los anteriores se añaden los siguientes


-M Otros materiales

-Q Maquinaria

-% Medios auxiliares

donde,

- H, se refiere al tipo 1 actual.

- MC, MCr, MM, MS, ME, MCu, Mal, ML y M, se refieren al tipo 3 actual. Dicha
clasificación de materiales se corresponde con la de los índices de revisión de precios

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 538


de las obras oficiales, a los que se añade el tipo M para aquellos materiales que no se
puedan asociar a ninguno de los anteriores.

- Q, se refiere al tipo 2 actual.

- %, se refiere a un nuevo tipo que se corresponde con los medios auxiliares que
pueden aparecer en una justificación de precios.

Tipos obtenidos de la Asociación de Redactores de Bases de Datos de la


Construcción.

Estos tipos sirven para desarrollar el tipo 0.


- EA Elemento auxiliar

- EU Elemento unitario

- EC Elemento complejo

- EF Elemento funcional

- OB Obra

- PA Partida Alzada

- PU Presupuesto Unitario

donde,

Elemento auxiliar. Elemento constructivo formado por una combinación de


elementos básicos ( mano de obra, materiales y maquinaria ) que intervienen en
la formación de una unidad de obra.

Ejemplos: Hormigón H-250 de consistencia plástica elaborado en obra; Acero AEH-


400 S elaborado en obra; etc.

Elemento unitario. Elemento constructivo formado por un conjunto de elementos


básicos y/o auxiliares que configuran una unidad de obra y que lo realiza un
mismo grupo de especialistas.

Ejemplos: Tabique de ladrillos cerámicos huecos sencillos de 25x12x4 cm,


tomados con mortero de cemento de dosificación 1:6; Hormigón H-250 en
soportes; etc.

Elemento complejo. Elemento constructivo formado por un conjunto de elementos


básicos, auxiliares y/o unitarios que constituye un conjunto constructivo y que lo
realiza uno o varios grupos de especialistas.

Ejemplos: Hormigón H-250 armado con 120 kg de acero AEH-400 S y encofrado


con placas metálicas, en soportes…; Cerramiento de fachada formado por dos
hojas cerámicas con aislamiento en cámara de aire…; etc.

Elemento funcional. Elemento constructivo formado por un conjunto de elementos


básicos, auxiliares, unitarios y/o complejos que constituye un conjunto
constructivo con una función completa dentro de la obra.

Ejemplos: Estructura de hormigón armado; Cocina formada por…; etc.

Especificación FIEBDC-3/2004 / 539


Obra. Elemento constructivo formado por un conjunto de elementos funcionales,
complejos, unitarios, auxiliares y/o simples que configuran la totalidad de
elementos que constituyen una construcción.

Ejemplos: Rehabilitación de fachada…; Edificio de viviendas plurifamiliar…; etc.

Partida Alzada. Unidad de obra a justificar.

Ejemplo: Partida alzada a justificar del 1% del PEM, para gastos de acción cultural.

Presupuesto Unitario. Concepto que se refiere a un presupuesto parcial que se


compone de unidades de obra y que tan solo se puede aplicar a conceptos del tipo
capítulo (con #). Se asimila a Elemento Funcional (EF) pero un comportamiento
diferente en su aplicación. Su comportamiento es que puede aparecer como una
unidad de obra en un presupuesto a la que se le asigna una medición; y en cambio
se comporta como un subcapítulos de presupuesto en cuanto a que no se le han de
aplicar costes indirectos (los costes indirectos, en su caso, ya los contemplan las
unidades de obra de su composición) y no aparece en los cuadros de precios 1 y 2.

Anexo 5. Ámbitos Territoriales


Como abreviaturas de Ámbitos Territoriales correspondientes a provincias y CCAA

del estado español, para su posible uso el campo RÓTULO_IDENTIFICACION del

registro ~V y/o el campo ABREV_AMBITO del registro ~W, se establecen las

siguientes:

E España

AND Comunidad Autónoma de Andalucía

AL Almería

CO Córdoba

H Huelva

CA Cádiz

GR Granada

J Jaén

MA Málaga

SE Sevilla

ARA Comunidad Autónoma de Aragón

TE Teruel

HU Huesca

Z Zaragoza

AST Com. Autónoma del Principado de Asturias

O Asturias

BAL Comunidad Autónoma de las Islas Baleares

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 540


PM Baleares

CAN Comunidad Autónoma de Canarias

GC Las Palmas

TF Tenerife

CBR Comunidad Autónoma de Cantabria

S Cantabria

CLM Comunidad Autónoma de Castilla-La Mancha

AB Albacete

CR Ciudad Real

CU Cuenca

GU Guadalajara

TO Toledo

CAL Comunidad Autónoma de Castilla y León

AV Ávila

SG Segovia

SO Soria

VA Valladolid

BU Burgos

LE León

P Palencia

SA Salamanca

ZA Zamora

CAT Comunidad Autónoma de Cataluña

B Barcelona

GI Girona

T Tarragona

L Lleida

EXT Comunidad Autónoma de Extremadura

BA Badajoz

CC Cáceres

GAL Comunidad Autónoma de Galicia

LU Lugo

OR Orense

PO Pontevedra

Especificación FIEBDC-3/2004 / 541


C La Coruña

MAD Comunidad de Madrid

M Madrid

MUR Com. Autónoma de la Región de Murcia

MU Murcia

NAV Comunidad Foral de Navarra

NA Navarra

PVA Comunidad Autónoma del País Vasco

VI Álava

BI Vizcaya

SS Guipúzcoa

RIO Comunidad Autónoma de La Rioja

LO La Rioja

VAL Comunidad Valenciana

V Valencia

A Alicante

CS Castellón

Anexo 6. Divisas
Como abreviaturas de las Divisas (campo DIVISA del registro ~K), se establecen las
especificadas por el BCE (Banco Central Europeo, http://www.ecb.int/), que son las
siguientes:

Unidad M onetaria Unión M onetaria Europea

ATS Chelín Austriaco


BEF Franco Belga
DEM Marco Alemán
ESP Peseta Española
FIM Marco Finlandés
FRF Franco Francés
GRD Dracma Griega
IEP Libra Irlandesa
ITL Lira Italiana
LUF Franco Luxemburgués
NLG Florín Neerlandés
PTE Escudo Portugués

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 542


M oneda no UM E Resto

AUD Dólar Australiano


BGN Lev Búlgaro
CAD Dólar Canadiense
CHF Franco Suizo
CYP Libra Chipriota
CZK Corona Checa
DKK Corona Danesa
EEK Corona Estona
EUR Euro
GBP Libra Esterlina
HKD Dólar de Hong-Kong
HUF Forint Húngaro
ISK Corona Islandesa
JPY Yen Japonés
KRW Won Surcoreano
LTL Litas Lituano
LVL Lats Letón
MTL Lira Maltesa
NOK Corona Noruega
NZD Dólar Neozelandés
PLN Zloty Polaco
ROL Leu Rumano
SEK Corona Sueca
SGD Dólar de Singapur
SIT Tolar Esloveno
SKK Corona Eslovaca
TRL Lira Turca
USD Dólar Estadounidense
ZAR Rand Sudafricano

Anexo 7. Unidades de Medida


"El Sistema Legal de Unidades de Medida obligatorio en España es el sistema métrico
decimal de siete unidades básicas, denominado Sistema Internacional de Unidades
(SI), adoptado por la Confederación General de Pesas y Medidas y vigente en la
Comunidad Económica Europea". RD 1317/1989, de 27 de octubre, modificado por RD
1737/1997, de 20 de noviembre, por el que se establecen las unidades legales de
medida.

Según este decreto se acuerda adoptar la nomenclatura de las unidades siguientes:

m metro
m2 metro cuadrado
m3 metro cúbico
kg kilogramo
km kilómetro
t tonelada
l litro
h hora
d día

Especificación FIEBDC-3/2004 / 543


a área
Ha hectárea
cm3 centímetro cúbico
cm2 centímetro cuadrado
dm3 decímetro cúbico

Por similitud con dicho decreto, la Asociación de Redactores de Bases de Datos de

Construcción acuerda adoptar las siguientes:

u unidad
mu mil unidades
cu cien unidades
mes mes

Anexo 8. Definición de diferentes tipos de Presupuestos, según


criterios de la ARBDC.
Se denomina PRESUPUESTO al sumatorio de las cantidades obtenidas en la medición
de las unidades de obra por sus respectivos precios organizados según una estructura
(ejemplo: raíz, capítulos, subcapítulos y partidas).

PRESUPUESTO DE EJECUCION MATERIAL (PEM)

(Artículo 68 del Reglamento General de Contratación del Estado):

Se denominará así al sumatorio de los productos de la cantidad de medición de cada


unidad de obra por su precio y de las partidas alzadas.

PRESUPUESTO DE EJECUCION POR CONTRATA (PEC)

(Artículo 68 del Reglamento General de Contratación del Estado):

Se denominará así al resultado de incrementar el PEM en los siguientes conceptos:

1) Gastos Generales de Estructura (GGE), que inciden sobre el contrato, cifrados


en los siguientes porcentajes, aplicados sobre el PEM:

Gastos generales de empresa (GG), gastos financieros, cargas fiscales (IVA


excluido), tasas de la Administración legalmente establecidas que inciden
sobre el coste de las obras y demás derivados de las obligaciones del
contrato. El porcentaje de aplicación para las obras oficiales varía entre el
13% y el 17%, especificado por cada Departamento Ministerial.

Beneficio industrial del contratista (BI), que para obras oficiales se fija en
un 6%.

2) El Impuesto sobre el Valor Añadido (IVA), que grave la ejecución de la obra,


cuyo tipo se aplicará sobre la suma del PEM y los GGE.

Este impuesto puede variar dependiendo de la zona geográfica, en cuyo caso se


aplicará el que corresponda, por ejemplo Impuesto General Indirecto Canario
(IGIC).

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 544


En obras privadas los porcentajes de gastos generales de empresa y beneficio
industrial pueden ser distintos de los especificados anteriormente.

PRESUPUESTO DE LICITACIÓN (PL)

Importe que sirve de base para formular las ofertas económicas de las empresas que
concurren a una licitación de obra.

PRESUPUESTO DE ADJUDICACIÓN (PAD)

Se denominará así al importe correspondiente a la proposición económica de la


empresa que resulta adjudicataria de la obra. Puede ser coincidente con el
Presupuesto de Licitación, inferior a éste si se produce baja, o superior a éste si se
produce alza.

Se recomienda que el alza o la baja se apliquen sobre el Presupuesto de Ejecución


Material, puesto que la cantidad resultante será la misma y sin embargo no se
reflejarán modificaciones en la imputación del IVA.

Especificación FIEBDC-3/2004 / 545


Especificación FIEBDC-3/2002
Especificación completa (desde 1/1/02)

INDICE:
0. ESPECIFICACIÓN del Formato.

1. ~V. Registro tipo Propiedad y VERSION.

2. ~C. Registro tipo Concepto.

3. ~D. Registro tipo Descomposición.

4. ~Y. Registro tipo Añadir Descomposición.

5. ~T. Registro tipo Texto.

6. ~P. Registro tipo Descripción Paramétrica.

7. ~L, ~Q, ~J. Registro tipo Pliegos.

8. ~W. Registro tipo Ámbito Geográfico.

9. ~G. Registro tipo INFORMACION Gráfica.

10. ~E. Registro tipo Entidad.

11. ~O. Registro tipo Relación Comercial.

12. ~X. Registro tipo INFORMACION Técnica.

13. ~K. Registro tipo Coeficientes.

14. ~M. Registro tipo Mediciones.

15. ~N. Registro tipo Añadir Mediciones.

16. ~A. Registro tipo Claves.

17. ~B. Registro tipo Cambio de CÓDIGO.

Especificación FIEBDC-3/2002 / 547


18. Formato FIEBDC-3. Resumen.

19. Anexo 1. Cambios respecto a FIEBDC-3/98 y FIEBDC-3/95.

20. Anexo 2. Descripción Paramétrica: Formato ESTÁNDAR.

21. Anexo 3. Descripción Paramétrica: API ESTÁNDAR para descripciones

paramétricas compiladas en DLL.


22. Anexo 4. Clasificación en tipos de los Conceptos.

23. Anexo 5. Ámbitos Territoriales.

24. Anexo 6. Divisas.

25. Anexo 7. Unidades de Medida.

26. Anexo 8. Definición de diferentes tipos de presupuestos, según criterios de la

ARBDC.

Definición del formato de intercambio estándar de bases de datos


de la construcción FIEBDC-3/2002(entrada en vigor a partir del
01/01/2002)
PRESENTACIÓN

La siguiente DEFINICIÓN del Formato de Intercambio ESTÁNDAR de Bases de Datos


de CONSTRUCCIÓN, recoge las especificaciones aprobadas hasta el Acta 9 de la CTP
inclusive (celebrada el 30 de octubre de 2001) y pendientes de ser ratificadas por la
JD y ASAMBLEA de la asociación FIEBDC. Actualmente no tiene fecha definida de
entrada en vigor, como VERSION 3/2002.

Para facilitar su lectura, aparece en el lado derecho del texto una línea vertical en
aquellos párrafos nuevos o modificados respecto a la especificación FIEBDC-3/98.

Este documento se pone a disposición de usuarios y empresas, con la única condición


de que cualquier implementación informática del presente formato debe recoger
tanto la entrada como la salida de datos.

Este formato pretende abarcar toda la INFORMACION contenida en las actuales bases
de datos de CONSTRUCCIÓN. No todos los desarrolladores de bases de datos
necesitarán utilizar todas las posibilidades del formato; así como tampoco todos los
programas de mediciones y presupuestos harán uso de toda la INFORMACION
suministrada.

Se prevé además, dentro del propio formato, la posibilidad de ampliación;


manteniendo en lo posible la compatibilidad entre versiones en el caso de tratar
nuevos contenidos que se prevean en un futuro.

Formato FIEBDC-3. Especificación


Toda la INFORMACION necesaria para reconstruir completamente una base de datos
u obra en soportes físico y lógico distintos a aquellos en los cuales se produjo la
INFORMACION es el objetivo del formato FIEBDC, Formato de Intercambio ESTÁNDAR
de Bases de Datos de CONSTRUCCIÓN.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 548


La INFORMACION de una base de datos, obra o certificación se dispondrá en
cualquier número de archivos en formato FIEBDC, con la extensión ".BC3", teniendo
en cuenta que estos archivos ordenados alfabéticamente contengan la
INFORMACION en el orden deseado.

La única limitación de tamaño de cada archivo será la máxima que permita el


soporte físico utilizado para su transporte. Si se utiliza algún tipo de compresor de
archivos, se deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.

El juego de caracteres a emplear en los campos CÓDIGO será el definido por MS-DOS
6.0, incluyendo < . > (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), < %> (ASCII-37), <
& > (ASCII-38), < _ > (ASCII-95).

El fin de línea será el ESTÁNDAR de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin
de archivo se marcará según el mismo ESTÁNDAR (ASCII-26). El único carácter de
control adicional que se permitirá será el tabulador (ASCII-9).

Cada archivo estará compuesto de registros, zonas de texto entre el carácter de


principio de registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la división de
archivos se deberá realizar al comienzo de un registro (carácter < ~ >).

Cada registro estará compuesto de campos separados por caracteres < | > (ASCII-
124). Todo campo con INFORMACION tendrá que finalizar con el separador de campos
y el registro deberá contener todos los separadores de campos anteriores, aunque no
contengan INFORMACION. No es necesario disponer de finalizadores de los campos
posteriores al último con INFORMACION.

Cada campo estará compuesto de subcampos separados por caracteres < \ > (ASCII-
92). El separador final, entre el último dato de un campo y el fin de campo es opcional.

El primer campo de cada registro es la cabecera de registro, una letra mayúscula que
identifica el tipo de registro.

Se ignorará cualquier INFORMACION entre el último separador de campos de un


registro (carácter < | >) o el comienzo del archivo y el comienzo del siguiente registro
(carácter < ~>).

Se ignorarán los caracteres blancos (32), tabuladores (9) y de fin de línea (13 y 10),
delante de los separadores < ~ >, < | > y < \ >.

No se podrán actualizar parcialmente campos de segundo orden (subcampos). Deberá


actualizarse la INFORMACION completa de un campo en cualquiera de los registros

La disposición de registros dentro de un archivo es completamente libre, pero se


garantizará la lectura secuencial de los mismos para evitar ambigüedades en las
sustituciones de INFORMACION.

Los campos vacíos se considerarán SIN INFORMACION, no con INFORMACION nula,


esto permite producir archivos de actualización que contengan únicamente la
INFORMACION en alguno de sus campos y, por supuesto, el CÓDIGO de referencia.

Para anular un campo numérico deberá aparecer explícitamente el valor 0 (cero).

Especificación FIEBDC-3/2002 / 549


Para anular un campo alfanumérico deberá aparecer explícitamente el RÓTULO NUL.

CONVENIOS DE NOTACIÓN
[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

(<DD>c) Tamaño máximo en número de caracteres del campo

Todos los valores numéricos irán sin separadores de miles y con el carácter punto '.'
entre la parte entera y la decimal.

Registro tipo propiedad y versión


Este registro se utiliza para documentar la procedencia y el formato de los archivos y,
cuando exista, se dispondrá al comienzo del primer archivo.

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \DDMMAAAA |


PROGRAMA_EMISION | [CABECERA] \ { ROTULO_IDENTIFICACION \ } |
JUEGO_CARACTERES |

PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra, fecha, …

VERSION_FORMATO: VERSION del formato del archivo, la actual es FIEBDC-3/2002

DDMMAAAA: DD representa el día con dos dígitos, MM el mes y AAAA el año. Si la


fecha tiene 6 ó menos dígitos, el año se representará con dos dígitos (AA),
interpretándose con el criterio “80/20”. Esto es, cualquier año que sea igual o
superior a 80 corresponderá al siglo XX y cualquier año que sea menor de 80
corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos representa mes y año
únicamente (MMAA), si tiene menos de tres, solo el año (AA). Si se identifica la fecha
con un número impar de dígitos, se completará con el carácter cero por la izquierda.
Para representar una fecha sin un día o mes específico, se utilizará un doble cero en
cada caso.

Ejemplos:
12062000 12 de junio de 2000

120699 12 de junio de 1999

00061281 junio de 1281

061281 6 de diciembre de 1981

401 abril de 2001

PROGRAMA_EMISION: Programa y/o empresa que genera los ficheros en formato


BC3.

CABECERA: Título general de los ROTULOS_IDENTIFICACION.

ROTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en


el campo PRECIO del registro ~C, y los conjuntos de campos de números de decimales
del registro ~K, que tal como se indica en su ESPECIFICACIÓN, puede representar
distintas épocas, ámbitos geográficos, etc., estableciéndose una relación biunívoca
entre ambos. Véanse los anexos 5 (Ámbitos territoriales) y 6 (Divisas).

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 550


En el caso de que en el registro ~V existan más campos ROTULO_IDENTIFICACION
que campos PRECIO en el registro ~C o que conjuntos de campos de decimales en el
registro ~K, se entenderá que el PRECIO y los conjuntos de campos de decimales de
dicho resto serán iguales al último definido.

JUEGO_CARACTERES: Asigna si el juego de caracteres a emplear es el definido para


D.O.S., cuyos identificadores serán 850 ó 437, o es el definido para Windows, cuyo
identificador será ANSI. En caso de que dicho campo esté vacío se interpretará, por
omisión, que el juego de caracteres a utilizar será el 850 por compatibilidad con
versiones anteriores.

Registro tipo concepto


Este registro contiene la INFORMACION básica de un concepto de cualquier tipo,
material, auxiliar, partida, capítulo, entidad, documento, etc., tanto en su VERSION
paramétrica como DEFINICIÓN tradicional.

~C | {CÓDIGO \ } | UNIDAD | RESUMEN | {PRECIO \} | { FECHA \ } | TIPO |

CODIGO: CODIGO del concepto descrito. Un concepto puede tener varios CODIGOs
que actuarán como sinónimos, este mecanismo permite integrar distintos sistemas
de clasificación.

Para distinguir el concepto tipo raíz de un archivo, así como los conceptos tipo
capítulo, se ampliará su CODIGO con los caracteres '##' y '#' respectivamente;
quedando dicha NOTACIÓN reflejada obligatoriamante en el registro tipo ~C ,siendo
opcional en los restantes registros del mismo concepto.

Las referencias a un CODIGO con y sin # y/o ##, se entienden únicas a un mismo
concepto.

Únicamente puede haber un concepto raíz en una base de datos u obra.

Si un código cuenta con un carácter ‘#’ intercalado, se entenderá que corresponde al


conjunto CODIGO_ENTIDAD # CODIGO_CONCEPTO definido en el registro de Tipo
Relación Comercial (registro ~O).

UNIDAD: Unidad de medida. Existe una relación de unidades de medida


recomendadas, elaborada por la Asociación de Redactores de Bases de Datos de
CONSTRUCCIÓN. Véase el Anexo 7 sobre Unidades de Medida

RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el número de


caracteres que admite en su campo resumen.

PRECIO: Precio del concepto. Un concepto puede tener varios precios alternativos que
representen distintas épocas, ámbitos geográficos, etc., definidos biunívocamente
respecto al campo [CABECERA] \ { ROTULO_IDENTIFICACION \ } del registro ~V.
Cuando haya más de un precio se asignarán secuencialmente a cada ROTULO
definido; si hay más ROTULOS que precios, se asignará a aquellos el último precio
definido.

FECHA: Fecha de la última actualización del precio. Cuando haya más de una fecha
se asignarán secuencialmente a cada precio definido, si hay más precios que fechas,
los precios sin su correspondiente fecha tomarán la última fecha definida.

Especificación FIEBDC-3/2002 / 551


Las fechas se definirán en el formato DDMMAAAA: DD representa el día con dos
dígitos, MM el mes y AAAA el año. Si la fecha tiene 6 ó menos dígitos, el año se
representará con dos dígitos (AA), interpretándose con el criterio “80/20”. Esto es,
cualquier año que sea igual o superior a 80 corresponderá al siglo XX y cualquier año
que sea menor de 80 corresponderá al siglo XXI. Si la fecha tiene menos de 5 dígitos
representa mes y año únicamente (MMAA), si tiene menos de tres, solo el año (AA).
Si se identifica la fecha con un número impar de dígitos, se completará con el
carácter cero por la izquierda. Para representar una fecha sin un día o mes
específico, se utilizará un doble cero en cada caso.

Ejemplos:
12062000 12 de junio de 2000

120699 12 de junio de 1999

00061281 junio de 1281

061281 6 de diciembre de 1981

401 abril de 2001

TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos:

0 (Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 (Materiales).

También se permite (y aconseja) utilizar la clasificación indicada por el BOE y la CNC


en índices y fórmulas polinómicas de revisión de precios así como los aconsejados por
la Asociación de Redactores de Bases de Datos de la Construcción. En el Anexo 4
aparecen los tipos actualmente vigentes.

Registro tipo descomposición


Este registro contiene la descomposición de un concepto en otros a través de una o
dos cantidades. El mismo registro lo emplearemos para definir la descomposición de
un concepto tipo unidad de obra en conceptos tipo materiales, mano de obra,
maquinaria y auxiliares y para la descomposición de un concepto tipo capítulo en
conceptos tipo unidad de obra o subcapítulo.

Si se define como concepto derivado un concepto que no posee partes variables en su


definición (no es un paramétrico) ni es un capítulo, entonces, un concepto derivado
sólo puede contener en su descomposición a conceptos derivados.

~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

CODIGO_PADRE: CODIGO del concepto descompuesto.

CODIGO_HIJO: CODIGO de cada concepto que interviene en la descomposición.

FACTOR: Factor de rendimiento, por defecto 1.0

RENDIMIENTO: Número de unidades, rendimiento o medición.

1. Cuando el CODIGO_HIJO incluye el carácter ‘%’ o el carácter ‘&’ es un


porcentaje sobre las líneas anteriores de la descomposición. El código de los
porcentajes tiene tres partes:

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 552


Prefijo, que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un carácter, que puede ser ‘&’ (porcentaje acumulable), o ‘%’ (porcentaje no


acumulable).

3. Una serie de caracteres libres que permite diferenciar un porcentaje de otro.

Ejemplo: OP%N0001

OP: Sobre todas la líneas anteriores cuyo código comience por OP.

%: Porcentaje no acumulable

N0001: Código diferenciador.

El rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la


actual y que queden afectadas por la máscara.

Ejemplo de una línea de descomposición: O%N0001 \\0.03\

Esta línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo código comience por O y cuyo
texto estará en la definición del código 'O%N0001'.

Ejemplo: ~C | O%N0001 | % | Medios auxiliares |

A efectos de cálculo de precios compuestos los porcentajes acumulables y no


acumulables se comportan de la misma forma. La diferencia entre ellos
únicamente se manifiesta en el cálculo de cantidades de simples que hay en un
presupuesto, para ello se consideraran los acumulables (‘&’) como porcentajes de
perdidas, roturas u otros casos que impliquen una mayor cantidad de los recursos
en líneas superiores. Los no acumulables (‘%’) se pueden referir a pequeño
material u otros casos que no impliquen una mayor necesidad de recursos en
líneas superiores.

La existencia del factor en líneas de descomposición y el uso casi nulo que se ha


hecho de los porcentajes acumulables (‘&’) hace que éstos se mantengan por
razones históricas pero se desaconseja su uso.

En el caso que el importe de un concepto se pueda obtener mediante el campo precio


del registro ~C y también mediante el registro ~D, será el importe obtenido de este
último el que primará sobre el importe del primero.

Registro tipo añadir descomposición


Con este registro se pueden añadir líneas de descomposición, el registro tipo ~D
cambia la descomposición completa. Para añadir conceptos nuevos a una base de
datos, además de definir los registros C, T, L, D,… deberíamos posicionar los nuevos
conceptos en el capítulo o capítulos donde queramos situarlos, para ello, es necesario
un registro que nos permita añadir una o varias líneas de descomposición por cada
capítulo donde queramos posicionar un nuevo concepto.

Especificación FIEBDC-3/2002 / 553


~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

Todos los campos tienen el mismo significado que en el registro tipo D.

Registro tipo texto


Este registro contiene el texto descriptivo de un concepto

~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

CODIGO_CONCEPTO: CODIGO del concepto descrito

TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de tamaño. El


texto podrá contener caracteres fin de línea (ASCII-13 + ASCII-10) que se
mantendrán al reformatearlo.

Registro tipo descripción paramétrica


Este registro contiene la descripción paramétrica, bien en formato tradicional bien
en formato API para DLL, que incluye la DEFINICIÓN de parámetros,
descomposiciones, comentario de ayuda a la selección de parámetros, resúmenes,
textos, pliegos, claves e INFORMACION comercial, en función de tablas, expresiones y
variables, para una familia de conceptos.

Este registro puede adoptar dos formas:

~P | CODIGO_FAMILIA | DESCRIPCION_PARAMETRICA |

Cuando CODIGO_FAMILIA está lleno, o bien DESCRIPCION_PARAMETRICA está llena,


o bien DESCRIPCION_PARAMETRICA está vacía. En éste último caso se accede a la
descripción paramétrica de la familia a través del archivo NOMBRE.DLL.

~P | | DESCRIPCION_PARAMETRICA | NOMBRE.DLL |

Cuando CODIGO_FAMILIA está vacío, se refiere al paramétrico global.

Si DESCRIPCION_PARAMETRICA está llena, el paramétrico global se establece a


partir de ésta. Si DESCRIPCION_PARAMETRICA está vacía y NOMBRE.DLL está lleno,
se establece a partir de éste. Si DESCRIPCION_PARAMETRICA y NOMBRE.DLL están
llenos a la vez, tan solo es válida DESCRIPCION_PARAMETRICA.

CODIGO_FAMILIA: CODIGO del concepto tipo familia descrito. Si se utiliza un modelo


de codificación dependiente de los parámetros (ver Anexos 2 y 3), este código debe
poseer un carácter ‘$’ en su séptima posición, y los conceptos en los que se deriva
tendrán como código los seis primeros caracteres del mismo más un carácter
adicional por cada parámetro que posea.

DESCRIPCION_PARAMETRICA: Ver Anexo 2.

NOMBRE.DLL: Ver Anexo 3.

Registro tipo pliegos


Este registro contiene las diferentes secciones y textos del pliego de condiciones de
un concepto. El pliego de condiciones se estructura de forma jerárquica con el
Sistema de Clasificación por Codificación y de forma facetada en varias secciones de

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 554


distinto contenido.

SECCIONES DE LOS PLIEGOS.


Cuando el primer campo del registro ~L está vacío, el registro define los CODIGOs de
las SECCIONES de cada pliego y sus ROTULOs correspondientes. Este registro es
único para una base de datos u obra.

~L | | { CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO \ } |

CODIGO_SECCION_ PLIEGO: CODIGO que define cada SECCION o faceta del pliego.

ROTULO_SECCION_PLIEGO: DEFINICION del ROTULO asociado a cada CODIGO


correspondiente de cada SECCION o faceta del pliego.

Ejemplo de las secciones de los pliegos definidas para la Base de Datos de


CONSTRUCCIÓN de la Comunidad de Madrid y la Base de Datos de CONSTRUCCIÓN
de la Comunidad Valenciana, indicando CODIGO y ROTULO de la SECCIÓN:
~L| | DES\ DESCRIPCION Y COMPLEMENTOS AL TEXTO

\PRE\ REQUISITOS PREVIOS A LA EJECUCIÓN

\COM\ COMPONENTES

\EJE\ EJECUCIÓN Y ORGANIZACIÓN

\NOR\ NORMATIVA

\CON\ CONTROL Y ACEPTACIÓN

\SEG\ SEGURIDAD E HIGIENE

\VAL\ CRITERIOS DE VALORACIÓN Y MEDICIÓN

\MAN\ MANTENIMIENTO

\VAR\ VARIOS \ |

MODELO 1 DE TEXTOS DE LOS PLIEGOS.


Cuando el primer campo del registro ~L no está vacío, identifica a un concepto
determinado. Puede haber un registro de este tipo por cada concepto de una base de
datos u obra.

~L | CODIGO_CONCEPTO |
{CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO \ } |
{ CODIGO_SECCION_PLIEGO \ARCHIVO_TEXTO_RTF \ }

| { CODIGO_SECCION_PLIEGO \ARCHIVO_TEXTO_HTM \ }

CODIGO_CONCEPTO: CODIGO del concepto descrito, contenido en la base de datos.

CODIGO_SECCION_PLIEGO: DEFINICION del CODIGO asociado a cada pliego.

TEXTO_SECCION_PLIEGO: Texto asignado a cada faceta o SECCIÓN del pliego de


condiciones del concepto.

El pliego de condiciones de cada concepto estará dividido con caracteres '\' en varias
secciones o facetas, pensadas para imprimirse juntas o por separado.

Especificación FIEBDC-3/2002 / 555


Los fines de línea de cada SECCIÓN del pliego se tratarán como en el REGISTRO
TIPO TEXTO.

ARCHIVO_TEXTO_RTF: Es el nombre del archivo que contiene el texto en formato


RTF asignado a cada SECCIÓN del pliego del concepto. Dicho archivo deberá ubicarse
en el mismo directorio donde se hallen el/los archivos con extensión BC3 que
incluyen su referencia.

ARCHIVO_TEXTO_HTM: Es el nombre del archivo que contiene el texto en formato


HTM asignado a cada SECCIÓN del pliego del concepto. Dicho archivo deberá
ubicarse en el mismo directorio donde se hallen el/los archivos con extensión BC3
que incluyen su referencia.

MODELO 2 DE TEXTOS DE LOS PLIEGOS.


Otra opción permite asignar el Pliego mediante párrafos de texto asociados a
conceptos, utilizando el siguiente esquema de registros, como forma alternativa a la
anterior:

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO

\ { ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |


ARCHIVO_PARRAFO_RTF | ARCHIVO_PARRAFO_HTM |

CODIGO_CONCEPTO: CODIGO del concepto descrito, contenido en la base de datos.


Será único para cada registro ~Q.

Este registro es de sustitución de la INFORMACION, no es de acumulación.

CODIGO_SECCION_PLIEGO: DEFINICION del CODIGO asociado a cada pliego.


Corresponde al definido en el registro de cabecera de pliego ~L.

CODIGO_PARRAFO: CODIGO del texto asociado a cada sección del pliego.

ABREV_AMBITO: Identificador del ámbito geográfico de la sección del pliego. Se


define en un registro propio.

TEXTO_PARRAFO: Texto que define el contenido de los pliegos que se asocian a un


concepto y se identifica con CODIGO_PARRAFO.

TEXTO_PARRAFO_RTF: Texto que define el contenido de los pliegos que se asocian a


un concepto y se identifica con CODIGO_PARRAFO, con formato RTF, de forma
opcional, siendo siempre obligatorio el campo TEXTO_PARRAFO.

ARCHIVO_PARRAFO_RTF: Es el nombre del archivo en formato RTF que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CODIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

ARCHIVO_PARRAFO_HTM: Es el nombre del archivo en formato HTM que define el


contenido de los pliegos que se asocian a un concepto y se identifica con
CODIGO_PARRAFO. Dicho archivo deberá ubicarse en el mismo directorio donde se
hallen el/los archivos con extensión BC3 que incluyen su referencia.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 556


Registro tipo ámbito geográfico
Establece el ámbito geográfico correspondiente a los Pliegos de Condiciones asociados
a la Base de Datos. No necesariamente deberá corresponder al campo CABECERA
definido en el registro ~V.

~W | { ABREV_AMBITO \ AMBITO \ } |

ABREV_AMBITO: Nombre abreviado que identifica el territorio geográfico al que se


refiere. (Comunidad Autónoma, Provincia, Región, Comarca, Localidad, etc.). El
identificador < * > (ASCII - 42) indica AMBITO_GENERAL, y representa todo el
territorio nacional.

AMBITO: Nombre completo del territorio geográfico.

Existe una relación de abreviaturas recomendadas, elaborada por la Asociación de


Redactores de Bases de Datos de CONSTRUCCIÓN, que se puede consultar en el
Anexo 5.

Registro tipo información gráfica


Este registro contiene el/los archivos gráficos asociados a un concepto. Todos los
archivos externos deben ubicarse en el mismo directorio donde se hallen el/los
archivos con extensión BC3 que incluyen su referencia.

~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

CODIGO_CONCEPTO: CODIGO del concepto descrito en la base de datos y contenido


en ella.

ARCHIVO_GRAFICO. EXT: Nombre del archivo que contiene la INFORMACION gráfica.


Se usarán como referencia programas estandarizados de uso general, para chequear
y verificar el contenido del fichero. Estos programas serán:
Ficheros tipo ráster: Extensión .BMP, .PCX : Windows 3.1

Extensiones .GIF, .JPG, .PNG: MS Internet Explorer 5.5

Extensión .TIF: Paint Shop Pro 4.0

Ficheros vectoriales: Extensión .WMF : Windows 3.1

Extensión .DXF : Autocad 12 Windows

Registro tipo entidad


Define las entidades suministradoras de documentación técnica, tarifas de precios y
especificaciones de los conceptos contenidos en la Base de Datos.

~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO \ SUBNOMBRE

\ DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS \ { TELÉFONO; }

\ { FAX; } \ { PERSONA_CONTACTO; } \ } | CIF \ WEB \ MAIL \ |

CODIGO_ENTIDAD: CODIGO del SCc que define a la entidad (empresa, organismo,


etc.).

Especificación FIEBDC-3/2002 / 557


RESUMEN: Nombre abreviado de la entidad

NOMBRE: Nombre completo de la entidad.

TIPO: Se definen los siguientes:


C central.

D delegación.

R representante.

SUBNOMBRE: Nombre de la delegación o representante en caso de que sea distinto


de la central. Normalmente estará vacío.

DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS: Dirección postal de la entidad


con todos sus datos, existiendo una dirección por cada subcampo tipo, de forma
ordenada y secuencial.

TELÉFONO: Números de teléfono de la entidad, de forma ordenada y secuencial


respecto al subcampo tipo, separados con el carácter < ; > (ASCII-59). Se indicará con
nueve caracteres numéricos, incluido el prefijo de la provincia.

FAX: Números de fax de la entidad, con las mismas especificaciones que el campo
anterior.

PERSONA_CONTACTO: Nombre de las personas de contacto con la entidad y cargo que


desempeña, podrá haber varias asociadas a cada subcampo tipo, de forma que estén
separadas por el carácter ASCII-59.

CIF: Código de Identificación Fiscal de la empresa.

WEB: Página web de la empresa.

MAIL: Dirección de correo electrónico de la empresa.

Registro tipo relación comercial


Este registro establece los vínculos entre los conceptos de una Base de Datos General
( BDG ) con los productos comerciales de una Base de Datos Específica ( BDE ), y/o
viceversa.

Así una Base de Datos ( BD ) podrá contener CONCEPTOS genéricos de una BDG,
CONCEPTOS referentes a productos comerciales de una BDE, o ambas a la vez.

~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | |

{ CODIGO_ARCHIVO \ CODIGO_ENTIDAD # CODIGO_CONCEPTO \ }

CODIGO_RAIZ_BD # CODIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CODIGO_RAIZ_BD: Se refiere a la identificación del CODIGO de la entidad que


elabora la BD. Este CODIGO debe ser facilitado por la entidad que elabora la BD,
para evitar ambigüedades. Se recomienda que éste sea el propio CIF de la
entidad.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 558


CODIGO_CONCEPTO: Se refiere a un concepto que pertenece a
CODIGO_RAIZ_BD, y empleado por ésta en su sistema de clasificación por
codificación.

CODIGO_ARCHIVO: Se refiere al nombre del archivo que, de existir, indica el lugar


donde se encuentra la INFORMACION referente a CODIGO_ENTIDAD #
CODIGO_CONCEPTO. Sin embargo si dicho CODIGO_ARCHIVO no existe, entonces
indica que CODIGO_ENTIDAD # CODIGO_CONCEPTO se encuentra en la misma BD.

CODIGO_ENTIDAD # CODIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CODIGO_ENTIDAD: Se refiere a la identificación del CODIGO de la entidad a la


que se le asocia INFORMACION. Este CODIGO debe ser facilitado por la entidad
que elabora la BD, de acuerdo con su sistema de clasificación, para evitar
ambigüedades. Se recomienda que éste el propio CIF de la entidad.

CODIGO_CONCEPTO: Se refiere a un concepto que pertenece a


CODIGO_ENTIDAD, y empleado por la entidad que elabora la BD en su sistema
de clasificación por codificación.

Cuando CODIGO_CONCEPTO se refiera a un producto comercial, dicho CODIGO


deberá ser facilitado por el fabricante, y no podrá coincidir nunca con la designación
de CODIGO_RAIZ_BD, CODIGO_ENTIDAD o CODIGO_CONCEPTO, cuando éste se
refiere a un concepto genérico. Al tener dicho producto comercial un tratamiento de
CONCEPTO, éste puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica, etc.). Para
poder utilizar los registros mencionados, el código identificador del concepto será
CODIGO_ENTIDAD # CODIGO_CONCEPTO.

Registro tipo información técnica


Este registro contiene la ESPECIFICACIÓN de otros datos referentes al concepto,
como por ejemplo, peso específico o nominal, características físicas, cuantías
geométricas, propiedades físico-mecánicas, etc.

Estos datos podrían emplearse en otras utilidades, como el cálculo de los coeficientes
de transmisión térmica, aislamiento acústico, etc.

El registro tipo INFORMACION Técnica puede adoptar dos formas:

Si el primer campo está vacío, éste sirve como diccionario de términos de


INFORMACION Técnica a los cuales se les podrá asociar una descripción y una
unidad de medida.

~X | | { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |

Si el primer campo identifica a un concepto, la INFORMACION que se especificará a


continuación serán la/las parejas de términos de INFORMACION técnica con sus
respectivos valores.

~X | CODIGO_CONCEPTO | { CODIGO_IT \ VALOR_IT \ } |

CODIGO_IT: CODIGO de la INFORMACION Técnica descrita.

Especificación FIEBDC-3/2002 / 559


DESCRIPCION_IT: Texto descriptivo de la INFORMACION Técnica, sin limitación de
tamaño.

UM: En el caso que los valores de la INFORMACION Técnica sean valores numéricos,
se indicará su Unidad de Medida, de acuerdo con el Sistema Internacional de
Unidades de Medida.

CODIGO_CONCEPTO: CODIGO del concepto descrito, contenido en la base de datos.


Será único para cada registro ~X.

VALOR_IT: Valor alfabético o numérico de la INFORMACION Técnica.

Registro tipo coeficientes


Indica el número de decimales en cada campo numérico. Cuando el campo numérico
aparece con signo negativo, indica número máximo de decimales. En caso contrario
indica número exacto de decimales.

Este registro tiene dos comportamientos.

Primer comportamiento: Se lee el primer campo que sirve para regular ciertos
conceptos de un banco de precios y de un presupuesto. El tercer campo está vacío.

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \
IVA | | [ n ] |

Segundo comportamiento: El tercer campo sirve para regular más aspectos de un banco
de precios y de un presupuesto que los del primer comportamiento. Por compatibilidad
con versiones anteriores, si el tercer campo no existe, se debe de leer el primer
campo.

~K | | CI \ GG \ BI \ BAJA \ IVA | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \


DI \ DES \ DN \ DD \ DS \ DIVISA \ } | [ n ] |
DN: Decimales del campo número de partes iguales de la hoja de mediciones.

DD: Decimales de Dimensiones de las tres magnitudes de la hoja de mediciones.

DS: Decimales de la línea de subtotal o total de mediciones

DR: Decimales de rendimiento y factor en una descomposición.

DI: Decimales del importe resultante de multiplicar rendimiento x precio del

concepto.

DP: Decimales del importe resultante del sumatorio de los costes directos del

concepto.

DC: Decimales del importe total del concepto. (CD+CI).

DM :Decimales del importe resultante de multiplicar la medición total del concepto

por su precio.

DIVISA: Es la divisa expresada en el mismo modo que las abreviaturas utilizadas

por el BCE (Banco Central Europeo), que en su caso deberán coincidir con

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 560


las del registro ~V. En el Anexo 6 se indican las actuales.

CI: Porcentaje de costes indirectos.

GG: Decimales de los Gastos Generales de la Empresa cuando estos están

expresados en porcentaje.

BI: Decimales del Beneficio Industrial cuando este está expresado en porcentaje.

BAJA: Decimales del Coeficiente de baja o alza de un presupuesto de adjudicación,

expresado en porcentaje.

IVA: Decimales Impuesto del Valor Añadido, cuando este está expresado en

porcentaje.

DRC: Decimales de la medición y del factor de medición de un presupuesto, y

decimales del resultado de su multiplicación.

DC: Decimales del importe de un presupuesto, de sus capítulos, subcapítulos, etc.

(unidades de obra excluidas), y decimales de los importes resultantes de

multiplicar la medición total del presupuesto, sus capítulos, subcapítulos, etc.

(unidades de obra excluidas) por sus precios respectivos.

DRO: Decimales de la medición de un capítulo, subcapítulo, etc. (unidades de obra

excluidas) de un presupuesto, y decimales del resultado de la multiplicación de

dicha medición por su factor.

DFS: Decimales de los factores de rendimiento de las unidades de obra y de los

elementos auxiliares.

DRS: Decimales de los rendimientos de las unidades de obra y de los elementos

auxiliares, y decimales del resultado de la multiplicación de dichos

rendimientos por sus respectivos factores.

DFO: Decimales del factor de medición de los capítulos, subcapítulos, etc. (unidades

de obra excluidas) de un presupuesto.

DUO:Decimales del importe de las unidades de obra y partidas alzadas, decimales del

importe resultante del sumatorio de los costes directos de la unidad de obra, y

decimales de los costes indirectos.

DI: Decimales de los importes resultantes de multiplicar los rendimientos totales

de las unidades de obra, elementos auxiliares por sus precios respectivos.

DES: Decimales del importe de los elementos simples.

Especificación FIEBDC-3/2002 / 561


n: Es el número de la opción de la función BdcGloParNumero que se refiere al

concepto divisa.

Si un importe viene con un número mayor de decimales del estipulado en el registro


~K, se debe redondear al número de decimales indicado en dicho registro ~K (criterio
<5 queda igual y >= 5 suma), y las operaciones que se hagan del importe serán con
este valor redondeado.

Para relacionar una determinada divisa con su convención de decimales, deberá


coincidir el orden en que aparezcan las diferentes divisas en el registro ~K, con el
orden indicado en el registro ~V o con el orden de las opciones de la función
BdcGloOpcNumero, en función de su caso. Si en el registro ~V hay más ROTULOS
que divisas en el registro ~K, los precios sin su correspondiente divisa tomarán la
última divisa definida en el registro ~K.

Ejemplo de una base de precios que facilita importes de 2 ámbitos territoriales en 2


divisas (se indican en negrita los campos afectados):

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \DDMMAA |


PROGRAMA_EMISION | [Precios de diferentes ámbitos territoriales en diferentes
divisas] \ { B-eur \ T-eur \ B-usd \ T-usd } | JUEGO_CARACTERES |

~C | {CODIGO \ } | UNIDAD | RESUMEN | { 120 \ 108 \ 102,8 \ 92,52 } |


{ FECHA \ } | TIPO |

~K | | CI \ GG \ BI \ BAJA \ IVA | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI


\ DES \ DN \ DD \ DS \ eur \ DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES
\ DN \ DD \ DS \ eur \ DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \
DN \ DD \ DS \ usd \ } [ n ] |

Registro tipo mediciones


En este registro figuran las mediciones (cantidades), en que interviene un concepto
de un presupuesto en la descomposición de otro de mayor rango.

En el intercambio de archivos de presupuestos, deberá figurar siempre este registro,


exista o no desglose de mediciones.

Cuando se trate de intercambiar una relación de registros ~M que recogen un listado


de mediciones no estructurado, no es necesario la disposición de un CODIGO raíz ni
los registros ~D complementarios. El operador indicará en estos casos cual es el
destino de la medición.

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION_TOTAL

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

CODIGO_PADRE: CODIGO del concepto padre o concepto descompuesto del


presupuesto.

CODIGO_HIJO: CODIGO del concepto hijo o concepto de la línea de descomposición.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 562


Este campo es opcional en el caso de intercambiar mediciones no estructuradas, es
decir, que no pertenecen a la estructura general y completa de un presupuesto.

POSICION: Posición del CONCEPTO_HIJO en la descomposición del


CONCEPTO_PADRE, este dato permite identificar la medición cuando la
descomposición del concepto padre incluye varios conceptos hijo con el mismo
CODIGO, la numeración de las posiciones comenzará con el 1.

El campo POSICION deberá especificarse siempre en intercambio de presupuestos


cuando éste sea completo y estructurado, e indicará el camino completo de la
medición descrita en la estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la
medición correspondiente al capítulo 3 del archivo; subcapítulo 5 del capítulo 3; y
partida 2 del subcapítulo 5. En mediciones no estructuradas este campo es opcional.

MEDICION_TOTAL: Debe coincidir con el rendimiento del registro tipo '~D'


correspondiente.

Incorpora el sumatorio del producto de unidades, longitud, latitud y altura o el


resultado de expresiones de cada línea, al leer este registro se recalculará este valor.

TIPO: Indica el tipo de línea de medición de que se trate. Usualmente este subcampo
estará vacío. Los tipos establecidos en esta VERSION son:

Subtotal parcial: En esta línea aparecerá el subtotal de las líneas anteriores desde
el último subtotal hasta la línea inmediatamente anterior a ésta.

Subtotal acumulado: En esta línea aparecerá el subtotal de todas las líneas


anteriores desde la primera hasta la línea inmediatamente anterior a ésta.

Expresión: Indicará que en el subcampo COMENTARIO aparecerá una expresión


algebraica a evaluar. Se podrán utilizar los operadores '(', ')', '+', '-', '*', '/' y '^'; las
variables 'a', 'b', 'c' y 'd' (que tendrán por valor las cantidades introducidas en los
subcampos UNIDADES, LONGITUD, LATITUD y ALTURA respectivamente); y la
constante 'p' para el valor Pi=3.1415926. Si la expresión utiliza alguna variable,
ésta será válida hasta la siguiente línea de medición en la que se defina otra
expresión.

COMENTARIO: Texto en la línea de medición. Podrá ser un comentario o una


expresión algebraica.

UNIDADES, LONGITUD, LATITUD, ALTURA: Cuatro número reales con las


mediciones. Si alguna magnitud no existe se dejará este campo vacío.

Registro tipo añadir mediciones


Igual que el registro tipo ~M pero añade las líneas de medición de este registro a las
ya existentes en vez de substituir toda la medición como hace en aquel.

~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } |MEDICION

| {TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

Registro tipo claves


Este registro establece la relación entre CODIGOs y descriptores del tesauro, para

Especificación FIEBDC-3/2002 / 563


permitir la búsqueda de conceptos mediante términos clave.

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |

CODIGO_CONCEPTO: CODIGO del concepto descrito en la base de datos y contenido


en ella.

CLAVE_TESAURO: Términos clave relacionados con el concepto. Los términos


compuestos (hormigón armado, cartón-yeso, mortero mixto) se identificarán unidos
mediante < _ > (ASCII - 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No
está permitido el empleo del espacio en blanco.

Registro tipo cambio de código


Con este registro se posibilita el cambio o anulación de los CODIGOs de los
conceptos, única unidad de INFORMACION que no se podía modificar con los registros
definidos anteriormente.

~B | CODIGO_CONCEPTO | CODIGO_NUEVO |

CODIGO_CONCEPTO: CODIGO del concepto a cambiar o anular. Debe existir y


pertenece a un concepto contenido en la BD

CODIGO_NUEVO: Nuevo CODIGO para CODIGO_CONCEPTO, no debe existir


previamente. Si este campo está vacío, se entiende que hay que eliminar
CODIGO_CONCEPTO.

Formato FIEBDC-3. Resumen


~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \ DDMMAAAA |

PROGRAMA_EMISION | [CABECERA] \ { ROTULO_IDENTIFICACION \ } |

JUEGO_CARACTERES |

~C | {CODIGO \ } | UNIDAD | RESUMEN | { PRECIO \ } | { FECHA \ } | TIPO |

~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

~P | CODIGO_FAMILIA | DESCRIPCION_PARAMETRICA |

~P | | DESCRIPCION_PARAMETRICA | NOMBRE.DLL |

~L | | { CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO \ }

~L | CODIGO_CONCEPTO | {CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO

\ } | { CODIGO_SECCION_PLIEGO \ARCHIVO_TEXTO_RTF \ }|

{ CODIGO_SECCION_PLIEGO \ARCHIVO_TEXTO_HTM \ }

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO

\ { ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |

ARCHIVO_PARRAFO_RTF | ARCHIVO_PARRAFO_HTM |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 564


~W | { ABREV_AMBITO \ AMBITO \ } |

~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO \ SUBNOMBRE

\ DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAIS \ { TELEFONO; }

\ { FAX; } \ { PERSONA_CONTACTO; } \ } | CIF \ WEB \ EMAIL \ |

~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | | { CODIGO_ARCHIVO \

CODIGO_ENTIDAD # CODIGO_CONCEPTO \ } |

~X | | { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |

~X | CODIGO_CONCEPTO | { CODIGO_IT \ VALOR_IT \ } |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \

IVA | | [ n ] |

~K | | CI \ GG \ BI \ BAJA \ IVA \ | { DC \ DUO \ DES \ DRC \ DFO \ DRO \ DFS \

DRS \ DSS \ DMU \ DMD \ DIVISA \ } | [ n ] |

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |

~B | CODIGO_CONCEPTO | CODIGO_NUEVO |

Anexo 1. Cambios respecto a FIEBDC-3/98 y FIEBDC-3/95


A continuación se indica la lista de apartados y registros del FIEBDC-3/2002
afectados por ampliaciones y/o modificaciones:

Apartado FIEBDC-3/98 FIEBDC-3/95

PRESENTACIÓN. X X
FORMATO FIEBDC-3. ESPECIFICACIÓN. X
~V. Registro tipo PROPIEDAD Y VERSION. X X
~C. Registro tipo CONCEPTO. X X
~D. Registro tipo DESCOMPOSICIÓN. X X
~P. Registro tipo DESCRIPCIÓN X
PARAMÉTRICA.
~L. Registro tipo PLIEGOS. X X
~W. Registro tipo ÁMBITO GEOGRÁFICO. X X
~G. Registro tipo INFORMACION GRÁFICA. X X
~E. Registro tipo ENTIDAD. X X
~O. Registro tipo RELACION COMERCIAL. X X
~X. Registro tipo INFORMACION TÉCNICA. X

Especificación FIEBDC-3/2002 / 565


~K. Registro tipo COEFICIENTES. X X
Anexo 3. API ESTÁNDAR para descripciones X X
paramétricas compiladas en DLL

Anexo 2. Descripción paramétrica: Formato ESTÁNDAR.


Un concepto paramétrico es el que define su CODIGO, resumen, texto, pliego,
descomposición e INFORMACION comercial de forma paramétrica, esto es, de una
forma variable mediante tablas y expresiones aritméticas y lógicas función de
parámetros.

En la descripción paramétrica se encuentran las siguientes sentencias:

Se definen las variables:


%A %B %C %D Parámetros seleccionados del concepto, de "a" a "z" ~ 1 a 26.

%O %P %Q %R Parámetros seleccionados de la obra, de "a" a "z" ~ 1 a 26.

%E Variable que define las condiciones de error.

$A $B $C $D Textos de los parámetros seleccionados del concepto.

$O $P $Q $R Textos de los parámetros seleccionados de la obra.

$E Variable que define los textos de error.

De forma equivalente las variables %O a %R y $O a $R tomarían el valor


correspondiente a los valores de los parámetros generales de la obra

Cualquier variable de la 'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se
puede definir o redefinir con cualquier número de dimensiones para ser utilizada
posteriormente en expresiones.

Se definen las constantes de la 'a' a la 'z' con los valores numéricos del 1 al 26
respectivamente, para permitir referenciar los parámetros de forma nemotécnica.
Para la utilización de otro tipo de caracteres, se determinará en el texto de la opción
del parámetro seleccionado el carácter de sustitución que se desea utilizar,
anteponiéndole un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se
realiza relacionando el carácter con la posición que ocupa.

Ejemplo: PBPO.2$ M3 Hormigón $B $A


\ CONSISTENCIA \ plástica \ fluida \ blanda \

\ RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \

El derivado PBPO.2aa sería: M3 Hormigón H-125 plástica

Con el carácter especial:

\ CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \

\ RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \

El mismo derivado sería: PBPO.2p2 M3 Hormigón H-125 plástica.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 566


Las variables numéricas deben permitir valores reales en coma flotante de doble
precisión (64bits) y las variables alfanuméricas deben poder almacenar textos de
cualquier tamaño.

Cualquier variable puede definirse, en la misma asignación, con cualquier número


y tamaño de dimensiones (hasta 4), en la DEFINICIÓN de dimensiones tendrán que
hacerse explícitas todas las dimensiones.
%U=...... # define una variable con un dato numérico

$X(8)=..... # define una lista de 8 datos alfanuméricos

%V(3,4)= ..... # define una tabla con 3 filas y 4 columnas de datos n.

Las variables %E y $E son especiales para devolver errores producidos por selecciones
de parámetros no coherentes. En una evaluación secuencial de expresiones, si en
una expresión la variable %E adopta un valor distinto de 0, ha habido algún error, se
interrumpe la evaluación de expresiones y se presenta el contenido de la variable $E
donde se almacena el texto del error producido.

Pueden haber múltiples asignaciones de %E, cada una de ellas precedida de su


correspondiente texto de error, asignación de $E.

Las constantes alfanuméricas se definirán entre comillas ($I="incluida parte


proporcional").

En la descripción paramétrica podemos encontrar los siguientes tipos de sentencias:

SENTENCIA DE ROTULOS DE PARÁMETRO:

\ <ROTULO del parámetro> \ { <ROTULO de la opción> \ }

Los parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el


orden que se encuentren.

SENTENCIA DE ASIGNACIÓN NUMÉRICA:

<variable numerica> = <expresión numérica>

SENTENCIA DE ASIGNACIÓN ALFANUMÉRICA:

<variable alfanumerica> = <expresión alfanumérica>

SENTENCIA DE RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)

<texto de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ] Se pueden


definir uno u opcionalmente dos rendimientos, el defecto del rendimiento opcional
es 1.

SENTENCIA DE MEDIOS AUXILIARES:

%: <expresión numérica> (en tanto por cien)

%%: <expresión numérica> (en tanto por uno)

SENTENCIA DE PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>

Especificación FIEBDC-3/2002 / 567


En caso de figurar conjuntamente un juego de sentencias de rendimiento a modo de
descomposición y una sentencia de precio, tendrá prioridad la sentencia de precio,
ignorando las sentencias de rendimiento.

SENTENCIA DE COMENTARIO:

\ COMENTARIO \ ó \ C \ <texto del comentario> \

Si existe texto de comentario, se presentará como ayuda a la selección de


parámetros junto a las opciones de éstos.

SENTENCIA DE SUSTITUCION:
\ RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \

\ TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \

\ PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }

\ CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }

\ COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\

<expresión_numérica>\}

Se considera que una sentencia continua en la línea siguiente si:


Acaba en un operador

Acaba sin cerrar comillas '"'

Comienza con '\' y no acaba con '\'

<constantes> PI, números, "texto" ...

<funciones> ABS( ), INT( ), SQRT( ) ...

<variables> [$%] [A-Z] [(dimensión{,dimensión})]

<expresión numérica>:

Son aquellas que dan como resultado un número en función de constantes y


variables numéricas, expresiones lógicas, funciones y operadores.

por ejemplo: %I= %A + 3.17*(1+%B) + ABS(%P+3.15*%Q)/12000

<expresión alfanumérica>:

Son aquellas que dan como resultada un texto en función de constantes y


variables alfanuméricas, operadores y funciones numéricas.

Una expresión alfanumérica puede incluir expresiones lógicas.

por ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)

añadir " de perdidas" a $I si el valor actual de %A es mayor que <a> ó 1.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 568


<expresiones lógicas>:

Son aquellas que dan como resultado VERDADERO o FALSO. En expresiones


numéricas el verdadero se considera como 1 y el falso como 0, en
alfanuméricas el falso se considera suprimir texto.

%I = 323*(%A=a) + 345*(%A=b) + 1523*($I=$A & $J=$B)

$I = "blanco"*(%C=c) + "negro"*(%C=d)

<texto de sustitución>:

En los textos de sustitución la INFORMACION es un texto constante (sin


comillas) con variables embebidas en él. Se consideran variables los
caracteres $ y % inmediatamente seguidos por una letra de la A a la Z.

En los textos de sustitución, las variables alfanuméricas se sustituyen por


sus contenido de texto correspondiente, las numéricas se sustituyen por las
constantes de la "a" a la "z" correspondientes al valor numérico de su
contenido.

En la expresión del rendimiento, la primera parte de la sentencia es un texto


de sustitución que una vez sustituidas las variables será el CODIGO del
concepto al que le corresponde la expresión numérica de la segunda parte de
la expresión como rendimiento. Si el resultado es 0, se ignora la sentencia y
no se considera ese componente o línea de descomposición.

CONVENIOS DE NOTACIÓN (EBNF)


[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

[a-b] Indica cualquier valor desde "a" a "b" inclusivas

[abc] Indica cualquiera de los valores a, b ó c

<abc> Indica descripción informal

abc Indica símbolo terminal

%[A-Z] Variable numérica

$[A-Z] Variable alfanumérica

Variables predefinidas:
[%$][ABCD] Parámetros del concepto

[%$][OPQR] Parámetros de la obra

[%$]E Variable especial para reportar errores

[%$][A-Z][(dim{,dim})] Variables definibles

# Comentarios (el texto comprendido entre este carácter y el siguiente

final de línea exclusive, no se tiene en cuenta)

, Separador de datos

Especificación FIEBDC-3/2002 / 569


: DEFINICIÓN de rendimiento

:: DEFINICIÓN de precio

%: DEFINICIÓN de medios auxiliares en tanto por cien

%%: DEFINICIÓN de medios auxiliares en tanto por uno

OPERADORES NUMÉRICOS (De menor a mayor precedencia)


+ Suma

- Resta

* Multiplicación

/ División

^ Operador elevado a

OPERADORES LÓGICOS (De menor a mayor precedencia)


@ Operador lógico O

& Operador lógico Y

< Menor

> Mayor

<= Menor o igual

>= Mayor o igual

= Igual

<> Diferente

! Operador lógico NO

FUNCIONES -- VALOR RETORNADO:


ABS(n) Valor absoluto de "n"

INT(n) Parte entera de "n"

ROUND(n,d) Redondeo de "n" a "d" decimales

SIN(n) Seno (grados sexagesimales)

COS(n) Coseno (grados sexagesimales)

TAN(n) Tangente (grados sexagesimales)

ASIN(n) Arco seno (gs)

ACOS(n) Arco coseno (gs)

ATAN(n) Arco tangente (gs)

ATAN2(x,y) Arco tangente con dos parámetros "x" e "y"

SQRT(n) Raíz cuadrada de "n"

ATOF(a) ConVERSION de alfanumérico "a" a numérico

FTOA(n) ConVERSION de numérico "n" a alfanumérico

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 570


Cada instrucción irá en distinta línea, a menos que la instrucción acabe en un
operador en cuyo caso se considera que sigue en la siguiente línea.

Si una línea acaba sin haber cerrado las comillas '"' o delimitador '\', se considerará
que sigue en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.

CONTROL DE ERRORES DE SELECCIÓN.


Es frecuente encontrar un gran número de combinaciones de parámetros posibles
pero tener pocas de ellas resueltas. Para evitar que el operador del sistema pruebe
distintas combinaciones de parámetros consiguiendo en todas ellas un mensaje de
error, el sistema debe ser capaz de guiarle en la selección de combinaciones
correctas.

Cada vez que el operador define un parámetro, el sistema evaluará todas las
sentencias posibles y en las sentencias del tipo: %E= ...., función de parámetros

Si todos los parámetros intervinientes en la expresión son conocidos, se evaluará


ésta y si el resultado fuera de ERROR se presentará la previa DEFINICIÓN de $E con
el mensaje del error.

Si todos los parámetros menos uno son conocidos, se irá dando valores al parámetro
desconocido y evaluando la expresión hasta recorrer todos los valores válidos del
parámetro. De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.

Cada vez que se defina o redefina un parámetro el sistema actualizará todos los
valores marcados en pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de
las opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.

Este sistema de control de errores de selección es sencillo de implementar en


cualquier soporte, pero obliga a los redactores de los descompuestos paramétricos a
definir explícitamente las combinaciones de parámetros incorrectas, ya que con
este método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios
paramétricos.

PROCEDIMIENTO DE LECTURA DE DESCRIPCIONES PARAMÉTRICAS.

Recorrer la descripción paramétrica ejecutando los siguientes pasos:


1. Eliminar desde el carácter '#' inclusive hasta el siguiente cambio de línea

exclusive.
2. Cambiar tabuladores (9) por caracteres ' ' (32)

3. Eliminar caracteres ' ' (32) delante y detrás de los caracteres '\'

4. Unir líneas, eliminando el fin de línea, en líneas que comienzan con '\' y

no acaban con '\', que terminan con un operador y en la separación de datos

de una variable matricial.

Especificación FIEBDC-3/2002 / 571


5. Eliminar todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o

delimitadas (\...\)
6. Eliminar líneas vacías.

7. Leer y evaluar secuencialmente las sentencias de la forma:

Si la sentencia comienza con '\' leer el ROTULO hasta el siguiente '\', si el ROTULO
es:

COMENTARIO ó C- Palabra o carácter reservado que identifica el siguiente


ROTULO entre '\' como comentario a la selección de parámetros.

RESUMEN ó R- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como el texto de sustitución del resumen del concepto.

TEXTO ó T- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como el texto de sustitución del texto descriptivo del concepto.

PLIEGO ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de las distintas secciones del pliego.

CLAVES ó K- Palabra o carácter reservado que identifica los siguientes


ROTULOs entre '\' como los textos de sustitución de los términos claves
asociados al concepto.

COMERCIAL ó F - Palabra o carácter reservado que identifica los siguientes


ROTULOs entre '\' como los textos de sustitución y tarifas de la INFORMACION
comercial del concepto.

Cualquier otro ROTULO identificará el nombre del siguiente parámetro y los


siguientes ROTULOs entre '\' como los ROTULOs de las opciones de dicho
parámetro.

Si la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.

Si la sentencia comienza con '%:' el resto de la misma debe ser una expresión
numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.

En otro caso si la sentencia contiene el carácter ':' la parte anterior a él es un texto


de sustitución del CODIGO de una línea de descomposición y la posterior una
expresión numérica, o dos separadas por ':', indicadoras de el o los rendimientos de
dicha línea de descomposición.

En aquellos casos donde pueda aparecer un carácter ’%’ seguido de un carácter


alfabético que se considere como tal y no como una variable de sustitución, deberá
emplearse ’%%’, para evitar la ambigüedad que se puede producir entre una variable
numérica que deba ser sustituida, una sentencia de medio auxiliar o un texto.

El resto de sentencias deberán ser de asignación de la forma variable/s =


expresión/es

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 572


RESUMEN DE TIPOS DE SENTENCIAS
Después de realizado el filtro descrito arriba, cada línea, tira de caracteres acabada
en (ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:
{ \ ROTULO_parámetro \ { opción_parámetro \ } (13)(10) }

{ variable = expresión (13)(10) }

{ CODIGO : rendimiento [ : rendimiento ] (13)(10) }

[ %: ó %%: medios_auxiliares (13)(10) ] % (tanto por cien) %% (tanto por uno)

[ :: expresión_precio (13)(10) ]

[ \ COMENTARIO \ ó \ C \ texto_comentario \ (13)(10) ]

[ \ RESUMEN \ ó \ R \ texto_resumen \ (13)(10) ]

[ \ TEXTO \ ó \ T \ texto_descriptivo \ (13)(10) ]

[ \ PLIEGO \ ó \ P \ { texto_faceta_pliego \ }(13)(10) ]

[ \ CLAVES \ ó \ K \ { término_clave \ }(13)(10) ]

[ \ COMERCIAL \ ó \ F \ { CODIGO_producto_comercial \ tarifa \ } (13)(10) ]

Anexo 3. Descripción paramétrica: API ESTÁNDAR para


descripciones paramétricas compiladas en DLL
INTRODUCCION
Debido a la necesidad expuesta por los desarrolladores de bases de datos
paramétricas de ampliar las posibilidades del lenguaje de descripción paramétrica,
poder compilar éste por eficiencia y protección de datos y posibilitar la protección
contra copia de bases de datos paramétricas, se establece la siguiente
ESPECIFICACIÓN.

En este documento se definen los componentes necesarios para el desarrollo de


descripciones paramétricas en cualquier lenguaje de aplicaciones para Windows (C,
C++, Pascal, Fortran, etc.) y sin ninguna limitación. Se incluye la DEFINICIÓN de un
API ESTÁNDAR en C, un ejemplo de base de datos en formato DLL de 32 bits
desarrollado en C++ y un ejemplo de aplicación con la implementación del interfaz
con el API en C, definidos ambos en Microsoft Visual C++. Se podría implementar el
interfaz con el API para otros compiladores y lenguajes para acceder a las mismas
DLL.

Es decir; es posible construir una base de datos que cumpla este API utilizando para
ello cualquier lenguaje de programación que permita desarrollar librerías de enlace
dinámico Windows (DLL). Asimismo, es posible construir un programa que lea
cualquier base de datos de estas características utilizando lenguajes de aplicaciones
para Windows.

El juego de caracteres utilizado en los textos devueltos por las funciones del API será
el especificado en el registro ‘~V’.

ARCHIVOS QUE DEBE CONTENER UNA BASE DE DATOS


Una base de datos que se desee distribuir con las definiciones paramétricas
compiladas en DLL, debe contener los siguientes archivos:

Especificación FIEBDC-3/2002 / 573


base.dll En este archivo, único para cada base de datos y de nombre cualquiera
pero extensión ‘.DLL’, se encuentran las funciones del API que la base
de datos ofrece a las aplicaciones para que éstas obtengan la
INFORMACION que contiene la base.

base.bc3 Archivo o archivos ASCII de la base de datos en formato FIEBDC-3/98.


Los registros '~P' de los conceptos cuya descripción paramétrica se
acceda a través del archivo ‘base.dll’, tendrán el campo
‘DESCRIPCIÓN_PARAMÉTRICA’ vacío. El CODIGO del concepto de este
registro deberá coincidir con el CODIGO del registro ‘~C’ correspondiente
y con el CODIGO utilizado en las llamadas a las funciones del API,
incluida(s) la(s) posible(s) almohadillas (‘#’). Ejemplo:

~P|ABCD12$| |

El registro '~P' correspondiente al paramétrico global, tendrá el campo


‘DESCRIPCIÓN_PARAMÉTRICA’ vacío, y tendrá un tercer campo con el
nombre del archivo DLL en el que se encuentren las funciones del API
de la base. Ejemplo:

~P| | | BASE.DLL |

La DEFINICIÓN paramétrica de los conceptos implementados de esta forma podrá


estar en el mismo archivo que las funciones del API (el archivo ‘base.dll’) o situado
en otro u otros archivos cualesquiera, conforme desee el desarrollador de la base de
datos. Las aplicaciones sólo accederán a las funciones del API incluidas en el
archivo ‘base.dll’, y éstas serán las encargadas de acceder a la INFORMACION en la
forma que el desarrollador de la base implemente.

DEFINICIÓN DEL API: FIEBDC.H


Único archivo que define el ESTÁNDAR. En este archivo se define el API en C, que
las descripciones paramétricas en DLL ofrecen a las aplicaciones. Se recomienda
incluir en las Bases de Datos todas las funciones del API, aunque no se utilicen
todas por la misma. Este interfaz permite definiciones paramétricas de ilimitado
número de parámetros e ilimitadas opciones por parámetro. Se soportan dos modelos
de codificaciones:

1. Un modelo de codificación independiente de parámetros, en el que el


CODIGO de un concepto paramétrico es completamente libre y el número de
caracteres del CODIGO es independiente del número de parámetros. En este
modelo, los códigos de las familias paramétricas no tienen por qué tener el
carácter $.

2. Un modelo dependiente de los mismos. Es el modelo que definía FIEBDC-3/95


y en el que el CODIGO de un concepto paramétrico debe tener un símbolo ‘$’
en su séptima posición y en el que se asigna de la 'a' a la 'z' las opciones 0 a
25 de cada parámetro, ampliándose en esta VERSION con los rangos 'A' a 'Z' y
'0' a '9' para que el número de opciones por parámetro en este modelo de
codificación pase a 62 (de 0 a 61).

Para que los programas puedan determinar si una base de datos responde a uno u
otro modelo, se ha definido la función BdcCodificacion(), que se especifica más
adelante y que indica si el sistema de codificación usado en la base de datos es

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 574


dependiente o independiente.

Si se adopta el primer modelo, no es posible averiguar ‘a priori’, a partir de un


CODIGO ‘ABCDEFGHIJ’ de concepto, si éste es un derivado paramétrico ni de que
concepto paramétrico procede o con qué valores de sus parámetros. Por ello, es
establece el siguiente criterio de búsqueda:

1. Si el concepto existe con este CODIGO en la base, se escogerá dicho


concepto.

2. En caso de no existir, se intentará localizarlo en la base de datos como


perteneciente a un concepto paramétrico ‘al estilo’ FIEBDC-3/95. En el
ejemplo, se intentará buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los
parámetros ‘GHIJ’ (que implica pasarle a sus cuatro parámetros valores ‘31’,
‘32’, ‘33’ y ‘34’ respectivamente).

3. En caso de no existir, se intentará localizarlo en la DLL. Si ésta posee un


modelo de codificación dependiente, se utilizará el mismo criterio que en el
punto anterior: en el ejemplo, buscar el concepto paramétrico ‘ABCDEF$’ y
pasarle los parámetros ‘GHIJ’. Si la base posee un modelo independiente, se
utilizará la función ‘BdcDecodifica()’, tal como se especifica más adelante.

4. Si no se cumplen ninguna de las condiciones anteriores, se supone que el


concepto no existe en la base.

Vea en el archivo ‘fiebdc.h’ adjuntado la definición del API.

ESPECIFICACIÓN DE LAS FUNCIONES DEL API


1. FUNCIONES GENERALES

LONG EXPORTA BdcCodificacion (

VOID

);

Propósito

Indica si la base de datos utiliza un modelo de codificación dependiente o


independiente del número y valor de los parámetros.

Valor devuelto

Devolverá ‘0’ si la codificación sigue un modelo dependiente (al ‘estilo’ FIEBDC-


3/95), y ‘1’ si sigue un modelo independiente.

LONG EXPORTA BdcTipoPliego (

VOID

);

Propósito

Indica qué tipo o tipos de Pliegos de Condiciones están implementados en la base.

Especificación FIEBDC-3/2002 / 575


Dichos modelos se especifican en el apartado ‘REGISTROS TIPO PLIEGOS’ de las
especificaciones del formato.

Valor devuelto

Devolverá ‘0’ si no está implementado ningún tipo de pliego.

Devolverá ‘1’ si está implementado el modelo uno de textos de pliegos. Es este caso,
se utilizará la función BdcPliego() para obtener los textos de los pliegos.

Devolverá ‘2’ si está implementado el modelo dos de textos de pliegos. En este caso,
se utilizarán las funciones BdcCodigoParrafo() y BdcTextoParrafo() para obtener los
textos de los pliegos.

Devolverá ‘3’ si están implementados tanto el modelo uno como el modelo dos.

LPCSTR EXPORTA BdcFecha (

VOID

);

Propósito

Obtener la fecha de la Base de Datos.

Valor devuelto

Devuelve la fecha de la Base de Datos en formato DDMMAAAA, donde DD representa


al día con dos dígitos, MM el mes y AAAA el año.

La propia función es responsable de asignar memoria al puntero. En caso de error, la


función devuelve NULL. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

2. FUNCIONES REFERENTES AL PARAM ÉTRICO GLOBAL

2.1 Accesibles en cualquier momento

2.1.1. Obtención de sus parámetros

LONG EXPORTA BdcGloParNumero (

VOID

);

Propósito

Obtener el número de parámetros de concepto paramétrico global.

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve -1.


Para obtener más INFORMACION sobre el error producido, llame a la función
BdcGloError().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 576


LONG EXPORTA BdcGloOpcNumero (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el
número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de producirse


un error, devuelve –1. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloParRotulo (

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el
número de parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error producido,
llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloOpcRotulo (

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Propósito

Obtiene el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Especificación FIEBDC-3/2002 / 577


Parámetros

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el
número de parámetros del concepto paramétrico global.

opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el
número de opciones que posee el parámetro ‘par’ del concepto
paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La propia
función es responsable de asignar memoria al puntero. En caso de error, la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcGloError().

2.1.2. Mensajes / CODIGOs de error

LONG EXPORTA BdcGloError (

LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene el tipo de error producido. Una vez leído, se inicializa el CODIGO de


error.

Parámetros

err: Puntero a un puntero constante ‘far’ a una cadena de caracteres. En él


se almacena el mensaje de error referente al error producido. La
función es responsable de asignar memoria al puntero. Si no existe un
mensaje definido para el error existente, ‘*err’ apuntará a la cadena
vacía “”.

Valor devuelto

Devuelve el CODIGO de error producido. Vea al final el apartado ‘CODIGOs de


los mensajes de error’ para más INFORMACION.

2.1.3. Asignación de opciones a los parámetros

BOOL EXPORTA BdcGloCalcula (

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Asigna los valores de los parámetros del concepto paramétrico global..

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 578


Parámetros

opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, devuelve ‘-1’.


Para obtener más INFORMACION sobre el error producido, llame a la función
BdcGloError().

3. FUNCIONES REFERENTES AL RESTO DE PARAM ÉTRICOS

3.1. Accesibles en cualquier momento

3.1.1. Lectura de un concepto paramétrico

HANDLE EXPORTA BdcLee (

LPCSTR cod // CODIGO del concepto

);

Propósito

Lee el concepto paramétrico identificado por ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CODIGO


del concepto paramétrico a leer. Si se utiliza un modelo de
codificación dependiente, se asume que dicho CODIGO tenga 7
caracteres y que el séptimo sea ‘$’. Dentro del CODIGO, los
caracteres pueden ser cualesquiera salvo el 0x00 (que indica el
final del CODIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe el paramétrico, la función devuelve
cero.

3.1.2. Lectura de un concepto paramétrico a partir del CODIGO completo del


derivado

HANDLE EXPORTA BdcDecodifica (

LPCSTR cod, // CODIGO completo del derivado paramétrico

LPLONG opcl // puntero al espacio de memoria a

); // rellenar con las opciones

Especificación FIEBDC-3/2002 / 579


Propósito

Lee el concepto paramétrico al que pertenece el concepto de CODIGO


‘cod’. El HANDLE y las opciones ‘opcl’ devueltas se pueden utilizar
directamente en una llamada a BdcCalcula().

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CODIGO


del concepto del que se desea obtener el concepto paramétrico a la
que pertenece. Dentro del CODIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CODIGO).

opcl: Puntero a un vector (array) de LONGs en el que la función


devolverá las opciones a las que corresponda el derivado
paramétrico. El array debe estar previamente dimensionado con al
menos el número de parámetros del concepto. Las opciones se
numeran empezando por cero.

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de


cero. En caso de error, o si no existe ningún concepto paramétrico del
que el concepto ‘cod’ es derivado, la función devuelve cero.

LPCSTR EXPORTA BdcFamilia (

LPCSTR cod) // CODIGO completo del derivado paramétrico

Propósito

Lee el código del concepto paramétrico al que pertenece el concepto de


CODIGO ‘cod’.

Parámetros

cod: Puntero constante ‘far’ a una cadena de caracteres con el CODIGO


del concepto del que se desea obtener el concepto paramétrico al
que pertenece. Dentro del CODIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CODIGO).

Valor devuelto

Si la función encuentra el paramétrico, retorna su código como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero.. En caso de error, o si no
existe ningún concepto paramétrico del que el concepto ‘cod’ es derivado,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

3.1.3. Mensajes / CODIGOs de error

LONG EXPORTA BdcError (

HANDLE h, // identificador del concepto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 580


LPCSTR *err // mensaje de error devuelto

);

Propósito

Obtiene tipo de error producido.

Parámetros

h: Identificador (HANDLE) del concepto, que debe ser obtenido en una


llamada anterior a la función BdcLee().

err: Puntero a un puntero constante ‘far’ a una cadena de caracteres.


En él se almacena el mensaje de error referente al error
producido. La función es responsable de asignar memoria al
puntero. Si no existe un mensaje definido para el error existente,
‘*err’ apuntará a la cadena vacía “”

Valor devuelto

Devuelve el CODIGO de error producido. Vea al final el apartado


‘CODIGOs de los mensajes de error’ para más INFORMACION.

3.2. Accesibles después de BdcLee

3.2.1. Obtención de sus parámetros

LONG EXPORTA BdcParNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de parámetros de concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve


-1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

LONG EXPORTA BdcOpcNumero (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Especificación FIEBDC-3/2002 / 581


Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de


producirse un error, la función devuelve -1. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcParRotulo (

HANDLE h, // identificador del concepto

LONG par // número de parámetro del concepto

);

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcOpcRotulo (

HANDLE h, // identificador del concepto

LONG par, // número de parámetro del concepto

LONG opc // número de la opción del parámetro

);

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 582


Propósito

Obtiene rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

par: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo
‘n’ el número de parámetros del concepto.

opc: Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’
el número de opciones que posee el parámetro ‘par’ del concepto.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError(). En caso de referirse a
ámbitos territoriales y a divisas, véanse los anexos 5 y 6.

3.2.2. Obtención de un comentario

LPCSTR EXPORTA BdcComentario (

HANDLE h, // identificador del concepto

);

Propósito

Obtiene un texto de comentario del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el comentario del concepto, como puntero constante ‘far’ a una


cadena de caracteres. La propia función es responsable de asignar
memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcError().

3.2.3. Asignación de opciones de los parámetros y validación o cálculo del


derivado

BOOL EXPORTA BdcValida (

Especificación FIEBDC-3/2002 / 583


HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Averigua si una determinada combinación paramétrica es correcta o no.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por
cero.

Valor devuelto

Devuelve ‘0’ si la combinación es correcta. En caso contrario, devuelve ‘-


1’. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().

BOOL EXPORTA BdcCalcula (

HANDLE h, // identificador del concepto

LPLONG opcl, // lista de opciones de los parámetros

);

Propósito

Calcula los datos correspondientes a un derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a un vector (array) de LONGs con las opciones que se desea
fijar a cada parámetro. Las opciones se numeran empezando por
cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, o de que la


combinación no sea correcta, devuelve ‘-1’. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LONG EXPORTA BdcValidos (

HANDLE h, // identificador del concepto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 584


LPBYTE *opcl, // lista de opciones de los parámetros de todos los
derivados válidos

);

Propósito

Obtiene las opciones de cada parámetro de todos los derivados


paramétricos válidos de la familia paramétrica. Si no se desea
implementar esta función en una determinada familia, la función
deberá devolver ‘0’. Está pensada para aquellas familias que posean un
número elevado de combinaciones posibles, en las que el averiguar
cuales de ellas son válidas mediante sucesivas llamadas a las funciones
BdcCalcula() o BdcValida() es muy costoso en tiempo. En una sola llamada
a esta función es posible, en estos casos, obtener todas las
combinaciones válidas.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

opcl: Puntero a una matriz (array) bidimensional de BYTEs a rellenar por


la función, en el que cada columna corresponde a un derivado
paramétrico válido, y cada fila corresponde a los valores de cada uno
de los parámetros. La matriz se devuelve al estilo de ‘C’; es decir,
por columnas. Las opciones se numeran empezando por cero. La
propia función es responsable de asignar memoria al puntero. La
memoria asignada en bytes será el número de combinaciones
válidas multiplicado por el número de parámetros.

Valor devuelto

Devuelve el número de derivados paramétricos válidos. En caso de que


dicha información no esté disponible, devuelve ‘0’. En caso de error,
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido,
llame a la función BdcError().

Ordenación

Las combinaciones válidas a devolver se ordenarán teniendo en cuesta


que el primer parámetro tiene más precedencia que el segundo, éste que
el tercero, y así sucesivamente.

Ejemplo

Si una familia paramétrica tiene 3 parámetros, con 9, 10 y 11 opciones


por parámetro respectivamente, el número total de combinaciones
posibles es 9x10x11 = 990. Si son válidas sólo las siguientes cuatro
(escritos en el orden especificado en el párrafo anterior):
1. Valores ‘0’, ‘5’, y ‘9’ de los parámetros uno al tres,

respectivamente.

Especificación FIEBDC-3/2002 / 585


2. Valores ‘7’, ‘6’ y ‘5’ de los parámetros uno al tres,

respectivamente.

3. Valores ‘8’, ‘2’ y ‘4’ de los parámetros uno al tres,

respectivamente.

4. Valores ‘8’, ‘2’ y ‘10’ de los parámetros uno al tres,

respectivamente.

Entonces la función devolverá los 4x3=12 bytes siguientes: 0, 5, 9, 7, 6, 5,


8, 2, 4, 8, 2 y 10.

3.2.4. Liberación de memoria

BOOL EXPORTA BdcCierra (

HANDLE h // identificador del concepto

);

Propósito

Cierra el concepto paramétrico y libera la memoria asignada.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve ‘0’ si realiza la operación correctamente. En caso de error, la


función devuelve ‘-1’. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

3.3. Accesibles después de BdcCalcula

3.3.1. Obtención del derivado paramétrico

LONG EXPORTA BdcDesNumero (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el número de conceptos en los que se descompone el derivado


paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 586


Valor devuelto

Devuelve el número de elementos de su descomposición. Un valor de


cero indicará que el concepto no tiene descomposición. Es posible que un
mismo concepto paramétrico posea derivados simples y compuestos. En
caso de error, la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcDesCodigo (

HANDLE h, // identificador del concepto

LONG des // número del elemento de la descomposición

);

Propósito

Obtiene el CODIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

Valor devuelto

Devuelve el CODIGO del elemento número ‘des’ en el que se descompone


el derivado paramétrico, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcFactor (

HANDLE h, // identificador del concepto

LONG des, // número del elemento de la


descomposición

double FAR *factor // factor a obtener

);

Propósito

Obtiene el factor de rendimiento del elemento número 'des' en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser

Especificación FIEBDC-3/2002 / 587


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

*factor: Puntero en el que devolver el factor deseado, por defecto 1. El


factor puede ser positivo, cero o negativo.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, el factor se


asigna a cero y la función devuelve '-1'. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcRendimiento (

HANDLE h, // identificador del concepto

LONG des, // número del elemento de la


descomposición

double FAR *ren // rendimiento a obtener

);

Propósito

Obtiene el rendimiento del elemento número ‘des’ en el que se


descompone el derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

des: Número del elemento de la descomposición del concepto. Los


elementos se numeran empezando por cero.

*ren: Puntero en el que devolver el rendimiento deseado. El rendimiento


puede ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el


rendimiento se asigna a cero y la función devuelve ‘-1’. Para obtener
más INFORMACION sobre el error producido, llame a la función BdcError
().

BOOL EXPORTA BdcPrecio (

HANDLE h, // identificador del concepto

double FAR *pre // precio unitario a devolver

);

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 588


Propósito

Obtiene el precio unitario en el caso de que el derivado paramétrico sea


un simple. Es posible que un mismo concepto paramétrico tenga como
derivados tanto simples como compuestos.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

*pre: Puntero en el que devolver el precio unitario. Dicho precio puede


ser positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el precio se


asigna a cero y la función devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodigo (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el CODIGO del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el CODIGO del concepto, como puntero constante ‘far’ a una


cadena de caracteres. Si se ha calculado un derivado paramétrico (se ha
llamado a BdcCalcula), este CODIGO será el del derivado paramétrico. En
caso contrario, será el CODIGO del concepto paramétrico. La propia
función es responsable de asignar memoria al puntero. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcUnidad (

HANDLE h // identificador del concepto

);

Propósito

Obtiene la unidad de medida del derivado paramétrico. Esta función


permite que un concepto paramétrico pueda generar elementos

Especificación FIEBDC-3/2002 / 589


derivados con distintas unidades de medición. Para que dicha función
actúe, el registro ~C debe contener el carácter especial ‘*’ dentro del
campo unidad de medida. Dicho carácter indica que la unidad de medida
de los conceptos derivados los debe proporcionar el API. Si el redactor de
la BD desea que la unidad de medida sea un valor a escoger por parte del
usuario, deberá además añadirse la unidad de medida como una
propiedad más del concepto paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto correspondiente a la unidad de medida del derivado


paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido un texto resumido, la función devuelve la cadena vacía “”.
En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcResumen (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto resumido del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto resumido del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un
texto resumido, la función devuelve la cadena vacía “”. En caso de error,
la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTexto (

HANDLE h // identificador del concepto

);

Propósito

Obtiene el texto completo de descripción del derivado paramétrico.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 590


Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto completo de descripción del derivado paramétrico, como


puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Si no existe definido un
texto completo de descripción, la función devuelve la cadena vacía “”. En
caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcPliego (

HANDLE h, // identificador del concepto

LONG formato, // identificador del formato

LONG tipo, // especifica si el pliego a obtener es de la


familia o del derivado

LPCSTR sección, // código de la sección del pliego

LPCSTR ámbito // abreviatura del ámbito

);

Propósito

Obtiene el texto del pliego, según el modelo uno.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

formato: Identificador del formato de texto. Se definen, por el momento,


los siguientes formatos: ‘BDCFMT_ASCII’ (si se desea obtener el
pliego en formato ASCII), ‘BDCFMT_RTF’ (si se desea obtener el
pliego en formato RTF) y ‘BDCFMT_HTM’ (si se desea obtener el
pliego en formato HTM).

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Código de la sección del pliego cuyo texto se desea obtener.


Deberá ser una de las secciones especificadas en el registro ~L,
según se indica en el apartado ‘REGISTROS TIPO PLIEGOS’ de la
especificaciones del formato. Si no existen secciones definidas,
el valor de este parámetro no es utilizado.

Especificación FIEBDC-3/2002 / 591


ámbito: Ámbito del cual se desea obtener el texto del pliego.
Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados
en el registro ~W, según se indica en el apartado ‘REGISTRO
TIPO ÁMBITO GEOGRÁFICO’ de las especificaciones del formato.
Si no existen ámbitos definidos (no existe un registro ~W), el
valor de este parámetro es ignorado. En ese caso, es posible que
el ámbito sea un parámetro global de la base.

Valor devuelto

Devuelve el texto del pliego del derivado paramétrico en el formato


solicitado, como puntero constante ‘far’ a una cadena de caracteres. La
propia función es responsable de asignar memoria al puntero. Si no
existe definido un texto de pliego, la función devuelve la cadena vacía “”.
En caso de error (por ejemplo formato no soportado por la BDC), la función
devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError().

LPCSTR EXPORTA BdcCodParrafo (

HANDLE h, // identificador del concepto

LONG tipo, // especifica si el pliego a obtener es de la


familia o del derivado

LPCSTR sección, // código de la sección del pliego

LPCSTR ámbito // abreviatura del ámbito

);

Propósito

Obtiene los códigos de los párrafos de pliego, según el modelo dos.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

tipo: Especifica si se desea obtener el pliego común de la familia


paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado (valor
‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber
realizado previamente una llamada a BdcCalcula().

sección: Código de la sección del pliego cuyos códigos de párrafo se desea


obtener. Deberá ser una de las secciones especificadas en el
registro ~L, según se indica en el apartado ‘REGISTROS TIPO
PLIEGOS’ de la especificaciones del formato. Si no existen
secciones definidas, el valor de este parámetro no es utilizado.

ámbito: Ámbito del cual se desea obtener los códigos de párrafo.


Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados
en el registro ~W, según se indica en el apartado ‘REGISTRO

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 592


TIPO ÁMBITO GEOGRÁFICO de las especificaciones del formato.
Si no existen ámbitos definidos (no existe un registro ~W), el
valor de este parámetro es ignorado. En ese caso, es posible que
el ámbito sea un parámetro global de la base.

Valor devuelto

Devuelve un texto con los códigos de párrafo del pliego del derivado
paramétrico, como puntero constante ‘far’ a una cadena de caracteres.
La propia función es responsable de asignar memoria al puntero. Si no
existe definido ningún código de párrafo, la función devuelve la cadena
vacía “”. En caso de error (por ejemplo ámbito no soportado por la BDC), la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError(). Los códigos irán separados con el
separador de subcampos habitual, es decir, el texto devuelto tendrá la
sintaxis

{ CODIGO_PARRAFO \ }

LPCSTR EXPORTA BdcTexParrafo (

LONG formato // identificador del formato

LPCSTR cod_parrafo // código del párrafo del pliego

);

Propósito

Obtiene el texto del pliego del derivado paramétrico correspondiente al


código de párrafo ‘cod_parrafo’, según el modelo dos. El código de párrafo
se obtiene mediante una llamada a la función BdcCodParrafo.

Parámetros

formato: Identificador del formato de texto. Se definen, por el


momento, los siguientes formatos: ‘BDCFMT_ASCII’ (si se
desea obtener el pliego en formato ASCII), ‘BDCFMT_RTF’ (si
se desea obtener el pliego en formato RTF) y
‘BDCFMT_HTM’ (si se desea obtener el pliego en formato
HTM).

cod_parrafo Código del párrafo del pliego cuyo texto se desea obtener.

Valor devuelto

Devuelve el texto del párrafo en el formato solicitado, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. Esta memoria se liberará en
la siguiente llamada a esta función dentro del mismo proceso. Si no
existe definido un texto de pliego con este código de párrafo, la función
devuelve la cadena vacía “”. En caso de error (por ejemplo formato no
soportado por la BDC), la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().

Especificación FIEBDC-3/2002 / 593


LPCSTR EXPORTA BdcClaves (

HANDLE h // identificador del concepto

);

Propósito

Obtiene las claves de tesauro del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve las claves de tesauro del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres, con el mismo formato que el
registro ‘~A’, es decir, ‘{CLAVE_TESAURO\}’. La propia función es
responsable de asignar memoria al puntero. Si no existen definidas
claves del tesauro, la función devuelve la cadena vacía “”. En caso de
error, la función devuelve NULL. Para obtener más INFORMACION sobre
el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTipo (

HANDLE h, // identificador del concepto

);

Propósito

Obtener el tipo del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser


obtenido en una llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el tipo del concepto, como puntero constante 'far' a una cadena
de caracteres. Si se ha calculado un derivado paramétrico (se ha llamado
a la función BdcCalcula) este tipo será el del derivado paramétrico. En
caso contrario, será el tipo del concepto paramétrico. La propia función
es responsable de asignar memoria al puntero. En caso de error, la
función devuelve NULL. Para obtener más INFORMACION sobre el error
producido, llame a la función BdcError(). Corresponde al campo TIPO del
registro ~C.

LONG EXPORTA BdcComercNumero(

HANDLE h // identificador del concepto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 594


LPCSTR codigo_raiz_BD // identificador de la entidad que
elabora la BD

);

Propósito

Obtener el número de conceptos vinculados a un concepto que pertenece


a codigo_raiz_BD y empleado por ésta en su sistema de clasificación por
codificación.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

codigo_raiz_BD: Se refiere a la identificación del CODIGO de la entidad


que elabora la BD. Este CODIGO debe ser facilitado por la
entidad que elabora la BD, para evitar ambigüedades. Se
recomienda que éste sea el propio CIF de la entidad.

Valor devuelto

Devuelve el número de conceptos vinculados. Si se ha calculado un


derivado paramétrico (se ha llamado a la función BdcCalcula) este
número será el del derivado paramétrico. En caso contrario, será el
número del concepto paramétrico. Un valor de cero significa que no tiene
conceptos vinculados. En caso de error la función devuelve '-1' . Para
obtener más INFORMACIÓN sobre el error producido, llame a la función
BdcError().

BOOL EXPORTA BdcComercCodigo(

HANDLE h // identificador del concepto

LONG comerc // número del concepto vinculado

LPCSTR Codigo_archivo // nombre de archivo a devolver

LPCSTR Codigo_Entidad // identificación del código de la


entidad a la que se asocia

// la información a devolver

LPCSTR Código_Concepto // concepto que pertenece a


códgo_entidad a devolver

);

Propósito

Obtener el código de archivo que indica el lugar donde se encuentra la


información referente a codigo_entidad#codigo_concepto, o bien el
codigo_entidad y el codigo_concepto que se encuentra en la misma BD.

Especificación FIEBDC-3/2002 / 595


Parámetros

h: Identificador (HANDLE) del concepto paramétrico.

comerc: Número del concepto vinculado. Los conceptos vinculados se


numeran empezando por cero.

codigo_archivo: Se refiere al nombre del archivo que, de existir, indica el


lugar donde se encuentra la información referente a
codigo_entidad#código_concepto. Si el valor es nulo los
campos código entidad y código concepto deberán existir.
La propia función es responsable de asignar memoria al
puntero.

codigo_entidad: Se refiere a la identificación del CODIGO de la entidad a


la que se le asocia INFORMACION. Este CODIGO debe ser
facilitado por la entidad que elabora la BD, de acuerdo con
su sistema de clasificación, para evitar ambigüedades. Se
recomienda que éste sea el propio CIF de la entidad. La
propia función es responsable de asignar memoria al
puntero.

codigo_concepto: Se refiere a un concepto que pertenece a


CODIGO_ENTIDAD, y empleado por la entidad que elabora
la BD. Cuando CODIGO_CONCEPTO se refiera a un
producto comercial, dicho CODIGO deberá ser facilitado
por el fabricante, y no podrá coincidir nunca con la
designación de CODIGO_RAIZ_BD, CODIGO_ENTIDAD o
CODIGO_CONCEPTO, cuando éste se refiere a un
concepto genérico. La propia función es responsable de
asignar memoria al puntero.

Al tener dicho producto comercial un tratamiento de CONCEPTO, éste


puede utilizar todos los registros existentes en el formato para
especificar su INFORMACION asociada (precio, INFORMACION gráfica,
etc.). Para poder utilizar los registros mencionados, el código
identificador del concepto será CODIGO_ENTIDAD #
CODIGO_CONCEPTO.

Valor devuelto

Devuelve '0' si se ejecuta correctamente. En caso de error, la función


devuelve '-1'. Para obtener más INFORMACIÓN sobre el error producido,
llame a la función BdcError().

4. M ENSAJES DE ERROR

Los CODIGOs de error se almacenan en un LONG (entero de 32 bits) de manera que


cada error corresponde a un bit. De esta forma, es posible definir hasta 32 CODIGOs
de error que pueden producirse de forma aislada o conjunta. Las llamadas a las
funciones BdcGloError() y BdcError() eliminan los CODIGOs de error producidos
anteriormente.

Por ejemplo, para saber si un determinado error se ha producido con el concepto

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 596


‘Concepto’, se debe utilizar la sintaxis:

const char *Mensaje;

LONG cod_err = BdcError ((HANDLE)Concepto, &Mensaje);

if (cod_err & BDCERR_BASE_DATOS) {

// Se ha producido el error ‘BDCERR_BASE_DATOS’

...

4.1. CODIGOs de los mensajes de error


BDCERR_CORRECTO No hay error.

BDCERR_BASE_DATOS Existe un mensaje de error. Es el caso en el

que la DEFINICIÓN paramétrica se indica

una combinación inválida y se devuelve un

mensaje de error explicativo.

BDCERR_PARAMETRO Se pasó a BdcCalcula o BdcGloCalcula un

parámetro inexistente.

BDCERR_OPCION Se pasó a BdcCalcula o BdcGloCalcula una

opción inexistente.

BDCERR_MAX_OPCIONES Se definieron más de 62 opciones en un

determinado parámetro.

BDCERR_NO_LEIDO Se intentó utilizar BdcCalcula() antes que

BdcLee().

BDCERR_NO_CALCULADO Se intentó acceder a datos de un derivado

paramétrico antes de utilizar BdcCalcula().

BDCERR_DESCOMPOSICION Se intentó acceder a un elemento de la

descomposición inexistente.

BDCERR_SIN_CODIGO No existe CODIGO definido.

BDCERR_SIN_MEMORIA Memoria insuficiente.

BDCERR_CONCEPTO_NULO Se pasó un HANDLE nulo.

BDCERR_FMT_NO_SOPORTADO El formato de texto solicitado no está

soportado por la BDC

BDCERR_NO_COMBINACION: A la llamada BdcValida o BdcCalcula se le

pasó una combinación inexistente.

BDCERR_NO_BANCO_PRECIOS: No existe ningún Banco de Precios.

Especificación FIEBDC-3/2002 / 597


EJEM PLOS

1. BASE DE DATOS EJEMPLO: BASE.DLL

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto los
archivos que constituyen la base como los fuentes necesarios para construirla
(compilarla).

El ejemplo construido posee las siguientes características (no todas las bases que se
realicen conforme a este formato deben tener estas mismas características):

1. Se ha utilizado un modelo de codificación independiente de los


parámetros.

2. Se ha utilizado el modelo uno de textos de pliegos.

3. Existe un paramétrico global, si bien el valor de su único parámetro sólo


es utilizado en el concepto ‘SBRG.1$’.

4. Existe un concepto (‘Esp$’) que no responde a los criterios de FIEBDC-


3/95: posee más de cuatro parámetros y el código de la familia sólo tiene
4 caracteres.

5. Todos los conceptos paramétricos poseen un CODIGO terminado en ‘$’, si


bien el formato no lo exige.

6. Existe un concepto (‘SBRG.1$’) cuyos derivados poseen un código que no


responde a los criterios de FIEBDC-3/95. Para la asignación de código se
ha seguido la técnica de definir una tabla de sinónimos: así, el concepto
que resulta de escoger el primer valor del único parámetro que posee, en
lugar de poseer el código ‘SBRG.1a’ posee el código ‘SBRG.1_18’.

7. Los textos de los pliegos sólo están definidos en formato ASCII y para los
derivados paramétricos. No están divididos ni en secciones (facetas) ni
en ámbitos.

1.1. Archivos para la distribución de la Base de Datos.

Para distribuir la base datos que se construyera con este ejemplo, se deberían
proporcionar los siguientes archivos:

base.dll DLL que contiene las descripciones paramétricas y el interfaz


ESTÁNDAR con aplicaciones (API).

base.bc3 Archivo ASCII de la base de datos en formato FIEBDC-3/98. En el


ejemplo, la base incluye en esta DLL el paramétrico global de la
base, así como las descripciones paramétricas de los conceptos
“ABPH.1$”, “SBRG.1$”, “EADR.3$” y “Esp$”, por lo que al menos debe
contar con los siguientes registros:
~P| | | BASE.DLL |

~P| ABPH.1$ | |

~P| SBRG.1$ | |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 598


~P| EADR.3$ | |

~P| Esp$ | |

1.2. Archivos necesarios para la CONSTRUCCIÓN de la Base de Datos.

Este ejemplo está preparado para compilarse con Microsoft Visual C++ VERSION
2.2 o posterior como DLL de 32 bits. Sin apenas modificaciones, sería posible
compilarlo como DLL de 16 bits o utilizar el compilador Borland C++.

Para construir la DLL, son necesarios los siguientes archivos:

fiebdc.h Archivo que define el formato.

base.h DEFINICIÓN de variables y defines útiles para la definición de las


descripciones paramétricas.

interfaz.cpp Implementación de las funciones del API.

aplicat.cpp Implementación de las funciones de la descripción paramétrica.

base.cpp Implementación de las descripciones paramétricas de la base de


datos en formato C++. Es la única parte que escribirían los
redactores de las bases de datos. Se ha utilizado una sintaxis
similar a la descripción paramétrica del formato FIEBDC-3/95, para
facilitar así el intercambio entre ambos formatos.

base.def DEFINICIÓN de las funciones de exportación del API.

2. APLICACIÓN EJEMPLO: PROGRAMA.EXE

En los archivos que acompañan a este documento (y que pueden encontrarse en la


página web de la asociación, ‘http://www.fiebdc.es’), se suministran tanto el
ejecutable (‘Programa.EXE’) como los fuentes necesarios para construirlo
(compilarlo).

Esta sencilla aplicación, lee los conceptos que se incluyen en el propio fuente de la
base BASE.DLL (en una aplicación real, los conceptos se definen en los registros ~P
de base.bc3), y escribe en el archivo 'SALIDA.TXT' los rótulos de todos sus
parámetros así como todos los datos de todas sus combinaciones paramétricas.

Los fuentes son fácilmente modificables para poder probar con el programa cualquier
base de datos que utilice paramétricos compilados en DLL de acuerdo con el API
establecido en este documento.

2.1. Archivos necesarios para la CONSTRUCCIÓN del programa ejemplo.

Este ejemplo está preparado para compilarse con Microsoft Visual C++ VERSION
2.2 o posterior como aplicación Windows 95 de 32 bits en modo consola. Sin
apenas modificaciones, sería posible compilarlo como aplicación de 16 bits o
utilizar el compilador Borland C++.

Para construir la aplicación, son necesarios los siguientes archivos:


fiebdc.h Archivo que define el formato.

Especificación FIEBDC-3/2002 / 599


program.h Declaración de variables y funciones.

program0.c Funciones auxiliares de apertura y cierre de la base de datos

y tratamiento de los mensajes de error.

program.c Programa ejemplo.

Anexo 4. Clasificación en tipos de los Conceptos


Tipos 0, 1, 2 y 3.

Estos tipos corresponden a los vigentes en los formatos FIEBDC-3/95 y FIEBDC-3/98.


-0 Sin clasificar

-1 Mano de obra

-2 Maquinaria

-3 Materiales

Tipos obtenidos de los índices y fórmulas polinómicas de revisión de precios del


BOE y de la CNC.

Esta clasificación proviene del BOE (Boletín Oficial del Estado: http://www.boe.es/) y
de la CNC (Confederación Nacional de la Construcción: http://www.cnc.es/), que la
utilizan para fijar los índices de variación de precios mediante sus respectivas
fórmulas polinómicas.
-H Mano de obra

- MC Cemento

- MCr Cerámicas

- MM Maderas

- MS Siderúrgicos

- ME Energía

- MCu Cobre

- Mal Aluminio

- ML Ligantes

A los anteriores se añaden los siguientes


-M Otros materiales

-Q Maquinaria

-% Medios auxiliares

donde,

- H, se refiere al tipo 1 actual.

- MC, MCr, MM, MS, ME, MCu, Mal, ML y M, se refieren al tipo 3 actual. Dicha
clasificación de materiales se corresponde con la de los índices de revisión de precios

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 600


de las obras oficiales, a los que se añade el tipo M para aquellos materiales que no se
puedan asociar a ninguno de los anteriores.

- Q, se refiere al tipo 2 actual.

- %, se refiere a un nuevo tipo que se corresponde con los medios auxiliares que
pueden aparecer en una justificación de precios.

Tipos obtenidos de la Asociación de Redactores de Bases de Datos de la


Construcción.

Estos tipos sirven para desarrollar el tipo 0.


- EA Elemento auxiliar

- EU Elemento unitario

- EC Elemento complejo

- EF Elemento funcional

- OB Obra

- PA Partida Alzada

donde,

Elemento auxiliar. Elemento constructivo formado por una combinación de


elementos básicos ( mano de obra, materiales y maquinaria ) que intervienen
en la formación de una unidad de obra.

Ejemplos: Hormigón H-250 de consistencia plástica elaborado en obra; Acero


AEH-400 S elaborado en obra; etc.

Elemento unitario. Elemento constructivo formado por un conjunto de


elementos básicos y/o auxiliares que configuran una unidad de obra y que lo
realiza un mismo grupo de especialistas.

Ejemplos: Tabique de ladrillos cerámicos huecos sencillos de 25x12x4 cm,


tomados con mortero de cemento de dosificación 1:6; Hormigón H-250 en
soportes; etc.

Elemento complejo. Elemento constructivo formado por un conjunto de


elementos básicos, auxiliares y/o unitarios que constituye un conjunto
constructivo y que lo realiza uno o varios grupos de especialistas.

Ejemplos: Hormigón H-250 armado con 120 kg de acero AEH-400 S y encofrado


con placas metálicas, en soportes…; Cerramiento de fachada formado por dos
hojas cerámicas con aislamiento en cámara de aire…; etc.

Elemento funcional. Elemento constructivo formado por un conjunto de


elementos básicos, auxiliares, unitarios y/o complejos que constituye un
conjunto constructivo con una función completa dentro de la obra.

Especificación FIEBDC-3/2002 / 601


Ejemplos: Estructura de hormigón armado; Cocina formada por…; etc.

Obra. Elemento constructivo formado por un conjunto de elementos


funcionales, complejos, unitarios, auxiliares y/o simples que configuran la
totalidad de elementos que constituyen una construcción.

Ejemplos: Rehabilitación de fachada…; Edificio de viviendas plurifamiliar…;


etc.

Partida Alzada. Unidad de obra a justificar.

Ejemplo: Partida alzada a justificar del 1% del PEM, para gastos de acción
cultural.

Anexo 5. Ámbitos Territoriales


Como abreviaturas de Ámbitos Territoriales correspondientes a provincias y CCAA del
estado español, para su posible uso el campo ROTULO_IDENTIFICACION del registro ~V
y/o el campo ABREV_AMBITO del registro ~W, se establecen las siguientes:
E España

AND Comunidad Autónoma de Andalucía


AL Almería

CO Córdoba

H Huelva

CA Cádiz

GR Granada

J Jaén

MA Málaga

SE Sevilla

ARA Comunidad Autónoma de Aragón


TE Teruel

HU Huesca

Z Zaragoza

AST Com. Autónoma del Principado de Asturias

O Asturias

BAL Comunidad Autónoma de las Islas Baleares

PM Baleares

CAN Comunidad Autónoma de Canarias


GC Las Palmas

TF Tenerife

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 602


CBR Comunidad Autónoma de Cantabria

S Cantabria

CLM Comunidad Autónoma de Castilla-La Mancha


AB Albacete

CR Ciudad Real

CU Cuenca

GU Guadalajara

TO Toledo

CAL Comunidad Autónoma de Castilla y León


AV Ávila

SG Segovia

SO Soria

VA Valladolid

BU Burgos

LE León

P Palencia

SA Salamanca

ZA Zamora

CAT Comunidad Autónoma de Cataluña


B Barcelona

GI Girona

T Tarragona

L Lleida

EXT Comunidad Autónoma de Extremadura


BA Badajoz

CC Cáceres

GAL Comunidad Autónoma de Galicia


LU Lugo

OR Orense

PO Pontevedra

C La Coruña

MAD Comunidad de Madrid

M Madrid

Especificación FIEBDC-3/2002 / 603


MUR Com. Autónoma de la Región de Murcia

MU Murcia

NAV Comunidad Foral de Navarra

NA Navarra

PVA Comunidad Autónoma del País Vasco


VI Álava

BI Vizcaya

SS Guipúzcoa

RIO Comunidad Autónoma de La Rioja

LO La Rioja

VAL Comunidad Valenciana


V Valencia

A Alicante

CS Castellón

Anexo 6. Divisas
Como abreviaturas de las Divisas (campo DIVISA del registro ~K), se establecen las
especificadas por el BCE (Banco Central Europeo, http://www.ecb.int/), que son las
siguientes:

Unidad M onetaria Unión M onetaria Europea

ATS Chelín Austriaco


BEF Franco Belga
DEM Marco Alemán
ESP Peseta Española
FIM Marco Finlandés
FRF Franco Francés
GRD Dracma Griega
IEP Libra Irlandesa
ITL Lira Italiana
LUF Franco Luxemburgués
NLG Florín Neerlandés
PTE Escudo Portugués

M oneda no UM E Resto

AUD Dólar Australiano


BGN Lev Búlgaro
CAD Dólar Canadiense
CHF Franco Suizo

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 604


CYP Libra Chipriota
CZK Corona Checa
DKK Corona Danesa
EEK Corona Estona
EUR Euro
GBP Libra Esterlina
HKD Dólar de Hong-Kong
HUF Forint Húngaro
ISK Corona Islandesa
JPY Yen Japonés
KRW Won Surcoreano
LTL Litas Lituano
LVL Lats Letón
MTL Lira Maltesa
NOK Corona Noruega
NZD Dólar Neozelandés
PLN Zloty Polaco
ROL Leu Rumano
SEK Corona Sueca
SGD Dólar de Singapur
SIT Tolar Esloveno
SKK Corona Eslovaca
TRL Lira Turca
USD Dólar Estadounidense
ZAR Rand Sudafricano

Anexo 7. Unidades de Medida


"El Sistema Legal de Unidades de Medida obligatorio en España es el sistema métrico
decimal de siete unidades básicas, denominado Sistema Internacional de Unidades
(SI), adoptado por la Confederación General de Pesas y Medidas y vigente en la
Comunidad Económica Europea". RD 1317/1989, de 27 de octubre, modificado por RD
1737/1997, de 20 de noviembre, por el que se establecen las unidades legales de
medida.

Según este decreto se acuerda adoptar la nomenclatura de las unidades siguientes:

m metro
m2 metro cuadrado
m3 metro cúbico
kg kilogramo
km kilómetro
t tonelada
l litro
h hora
d día
a área
Ha hectárea
cm3 centímetro cúbico
cm2 centímetro cuadrado
dm3 decímetro cúbico

Por similitud con dicho decreto, la Asociación de Redactores de Bases de Datos de

Especificación FIEBDC-3/2002 / 605


Construcción acuerda adoptar las siguientes:

u unidad
mu mil unidades
cu cien unidades
mes mes

Anexo 8. Definición de diferentes tipos de Presupuestos, según


criterios de la ARBDC.
Se denomina PRESUPUESTO al sumatorio de las cantidades obtenidas en la medición
de las unidades de obra por sus respectivos precios organizados según una estructura
(ejemplo: raíz, capítulos, subcapítulos y partidas).

PRESUPUESTO DE EJECUCIÓN MATERIAL (PEM)

(Artículo 68 del Reglamento General de Contractación del Estado):

Se denominará así al sumatorio de los productos de la cantidad de medición de cada


unidad de obra por su precio y de las partidas alzadas.

PRESUPUESTO DE EJECUCIÓN POR CONTRATA (PEC)

(Artículo 68 del Reglamento General de Contractación del Estado):

Se denominará así al resultado de incrementar el PEM en los siguientes conceptos:

1. Gastos Generales de Estructura (GGE), que inciden sobre el contrato, cifrados


en los siguientes porcentajes, aplicados sobre el PEM:

Gastos generales de empresa (GG), gastos financieros, cargas fiscales (IVA


excluido), tasas de la Administración legalmente establecidas que inciden
sobre el coste de las obras y demás derivados de las obligaciones del
contrato. El porcentaje de aplicación para las obras oficiales varía entre el
13% y el 17%, especificado por cada Departamento Ministerial.

Beneficio industrial del contratista (BI), que para obras oficiales se fija en
un 6%.

2. El Impuesto sobre el Valor Añadido (IVA), que grave la ejecución de la obra,


cuyo tipo se aplicará sobre la suma del PEM y los GGE.

Este impuesto puede variar dependiendo de la zona geográfica, en cuyo caso se


aplicará el que corresponda, por ejemplo Impuesto General Indirecto Canario (IGIC).

En obras privadas los porcentajes de gastos generales de empresa y beneficio


industrial pueden ser distintos de los especificados anteriormente.

PRESUPUESTO DE LICITACIÓN (PL)

Importe que sirve de base para formular las ofertas económicas de las empresas que
concurren a una licitación de obra.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 606


PRESUPUESTO DE ADJUDICACIÓN (PAD)

Se denominará así al importe correspondiente a la proposición económica de la


empresa que resulta adjudicataria de la obra. Puede ser coincidente con el
Presupuesto de Licitación, inferior a éste si se produce baja, o superior a éste si se
produce alza.

Se recomienda que el alza o la baja se apliquen sobre el Presupuesto de Ejecución


Material, puesto que la cantidad resultante será la misma y sin embargo no se
reflejarán modificaciones en la imputación del IVA.

Especificación FIEBDC-3/2002 / 607


Especificación FIEBDC-3/98
Generalidades

DEFINICIÓN DEL FORM ATO DE INTERCAM BIO ESTÁNDAR DE BASES DE DATOS DE


CONSTRUCCIÓN FIEBDC-3/98
ÍNDICE
~V. Registro tipo Propiedad y Versión.

~C. Registro tipo Concepto.

~D. Registro tipo Descomposición.

~Y. Registro tipo Añadir Descomposición.

~T. Registro tipo Texto.

~P. Registro tipo Descripción Paramétrica.

~L, ~Q, ~J. Registro tipo Pliegos.

~W. Registro tipo Ámbito Geográfico.

~G. Registro tipo información Gráfica.

~E. Registro tipo Entidad.

~O. Registro tipo Relación Comercial.

~X. Registro tipo información Técnica.

~K. Registro tipo Coeficientes.

~M. Registro tipo Mediciones.

~N. Registro tipo Añadir Mediciones

~A. Registro tipo Claves.

~B. Registro tipo Cambio de código.

Especificación FIEBDC-3/98 / 609


Introducción

La siguiente definición del Formato de Intercambio estándar de Bases de Datos de


construcción, fue aprobada en abril de 1.977, para entrar en vigor a partir del 1 de enero
de 1.998 como Versión 3.

Este documento se pone a disposición de usuarios y empresas, con la única condición


de que cualquier implementación informática del presente formato debe recoger tanto
la entrada como la salida de datos.

Este formato pretende abarcar toda la información contenida en las actuales bases de
datos de construcción. No todos los desarrolladores de bases de datos necesitarán
utilizar todas las posibilidades del formato; así como tampoco todos los programas de
mediciones y presupuestos harán uso de toda la información suministrada.

Se prevé además, dentro del propio formato, la posibilidad de ampliación; manteniendo


en lo posible la compatibilidad entre versiones en el caso de tratar nuevos contenidos
que se prevean en un futuro.

Formato FIEBDC-3. Especificación


Toda la información necesaria para reconstruir completamente una base de datos u
obra en soportes físico y lógico distintos a aquellos en los cuales se produjo la
información es el objetivo del formato FIEBDC, Formato de Intercambio estándar de
Bases de Datos de construcción.

La información de una base de datos, obra o certificación se dispondrá en cualquier


número de archivos en formato FIEBDC, con la extensión ".BC3", teniendo en cuenta
que estos archivos ordenados alfabéticamente contengan la información en el orden
deseado.

La única limitación de tamaño de cada archivo será la máxima que permita el


soporte físico utilizado para su transporte. Si se utiliza algún tipo de compresor de
archivos, se deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.

El juego de caracteres a emplear en los campos código será el definido por MS-DOS
6.0, incluyendo < . > (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), < %> (ASCII-37), <
& > (ASCII-38), < _ > (ASCII-95).

El fin de línea será el estándar de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin
de archivo se marcará según el mismo estándar (ASCII-26). El único carácter de
control adicional que se permitirá será el tabulador (ASCII-9).

Cada archivo estará compuesto de registros, zonas de texto entre el carácter de


principio de registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la división de
archivos se deberá realizar al comienzo de un registro (carácter < ~ >).

Cada registro estará compuesto de campos separados por caracteres < | > (ASCII-
124). Todo campo con información tendrá que finalizar con el separador de campos y
el registro deberá contener todos los separadores de campos anteriores, aunque no
contengan información. No es necesario disponer de finalizadores de los campos
posteriores al último con información.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 610


Cada campo estará compuesto de subcampos separados por caracteres < \ > (ASCII-
92). El separador final, entre el último dato de un campo y el fin de campo es opcional.

El primer campo de cada registro es la cabecera de registro, una letra mayúscula que
identifica el tipo de registro.

Se ignorará cualquier información entre el último separador de campos de un


registro (carácter < | >) o el comienzo del archivo y el comienzo del siguiente registro
(carácter < ~>).

Se ignorarán los caracteres blancos (32), tabuladores (9) y de fin de línea (13 y 10),
delante de los separadores < ~ >, < | > y < \ >.

No se podrán actualizar parcialmente campos de segundo orden (subcampos). Deberá


actualizarse la información completa de un campo en cualquiera de los registros

La disposición de registros dentro de un archivo es completamente libre, pero se


garantizará la lectura secuencial de los mismos para evitar ambigüedades en las
sustituciones de información.

Los campos vacíos se considerarán SIN información, no con información nula, esto
permite producir archivos de actualización que contengan únicamente la
información en alguno de sus campos y, por supuesto, el código de referencia.

Para anular un campo numérico deberá aparecer explícitamente el valor 0 (cero).

Para anular un campo alfanumérico deberá aparecer explícitamente el rótulo NUL.

CONVENIOS DE NOTACIÓN

[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

(<DD>c) Tamaño máximo en número de caracteres del campo

Todos los valores numéricos irán sin separadores de miles y con el carácter punto '.'
entre la parte entera y la decimal.

Registro tipo propiedad y versión


Este registro se utiliza para documentar la procedencia y el formato de los archivos y,
cuando exista, se dispondrá al comienzo del primer archivo.

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \DDMMAA | PROGRAMA_EMISION


| [CABECERA] \ { ROTULO_IDENTIFICACION \ } | JUEGO_CARACTERES |

PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra, fecha, ...

VERSION_FORMATO: versión del formato del archivo, la actual es FIEBDC-3

DDMMAA: DD representa el día con dos dígitos, MM el mes y AA el año, si la fecha


tiene menos de 5 dígitos representa mes y año únicamente, si tiene menos de tres,
solo el año. Si se identifica la fecha con un número impar de dígitos, se completará
con el carácter cero por la izquierda.

Especificación FIEBDC-3/98 / 611


PROGRAMA_EMISION: Programa y/o empresa que genera los archivos en formato
BC3.

CABECERA: Título general de los ROTULOS_IDENTIFICACION.

ROTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en


el campo PRECIO del registro ~C, que tal como se indica en su especificación, puede
representar distintas épocas, ámbitos geográficos, etc., estableciéndose una relación
biunívoca entre ambos.

JUEGO_CARACTERES: Asigna si el juego de caracteres a emplear es el definido para


D.O.S., cuyos identificadores serán 850 ó 437, o es el definido para Windows, cuyo
identificador será ANSI. En caso de que dicho campo esté vacío se interpretará, por
omisión, que el juego de caracteres a utilizar será el 850 por compatibilidad con
versiones anteriores.

Registro tipo concepto


Este registro contiene la información básica de un concepto de cualquier tipo,
material, auxiliar, partida, capítulo, entidad, documento, etc., tanto en su versión
paramétrica como definición tradicional.

~C | {CODIGO \ } | UNIDAD | RESUMEN | {PRECIO \} | { FECHA \ } | TIPO |

CODIGO: código del concepto descrito. Un concepto puede tener varios códigos que
actuarán como sinónimos, este mecanismo permite integrar distintos sistemas de
clasificación.

Para distinguir el concepto tipo raíz de un archivo, así como los conceptos tipo
capítulo, se ampliará su código con los caracteres '##' y '#' respectivamente;
quedando dicha NOTACIÓN reflejada obligatoriamente en el registro tipo ~C ,siendo
opcional en los restantes registros del mismo concepto.

Las referencias a un código con y sin # y ##, se entienden únicas a un mismo


concepto.

Únicamente puede haber un concepto raíz en una base de datos u obra.

UNIDAD: Unidad de medida. Existe una relación de unidades de medida


recomendadas, elaborada por la Asociación de Redactores de Bases de Datos de
construcción.

RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el número de


caracteres que admite en su campo resumen.

PRECIO: Precio del concepto. Un concepto puede tener varios precios alternativos que
representen distintas épocas, ámbitos geográficos, etc., definidos biunívocamente
respecto al campo [CABECERA] \ { ROTULO_IDENTIFICACION \ } del registro ~V.
Cuando haya más de un precio se asignarán secuencialmente a cada rótulo definido;
si hay más rótulos que precios, se asignará a aquellos el último precio definido.

FECHA: Fecha de la última actualización del precio. Cuando haya más de una fecha
se asignarán secuencialmente a cada precio definido, si hay más precios que fechas,
los precios sin su correspondiente fecha tomarán la última fecha definida.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 612


Las fechas se definirán en el formato DDMMAA; DD representa el día con dos dígitos,
MM el mes y AA el año, si la fecha tiene menos de 5 dígitos representa mes y año
únicamente, si tiene menos de tres, solo el año. Si se identifica la fecha con un
número impar de dígitos, se completará con el carácter cero por la izquierda.

TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos:

0 (Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 (Materiales).

Registro tipo descomposición


Este registro contiene la descomposición de un concepto en otros a través de una o
dos cantidades. El mismo registro lo emplearemos para definir la descomposición de
un concepto tipo unidad de obra en conceptos tipo materiales, mano de obra,
maquinaria y auxiliares y para la descomposición de un concepto tipo capítulo en
conceptos tipo unidad de obra o subcapítulo.

~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

CODIGO_PADRE: código del concepto descompuesto.

CODIGO_HIJO: código de cada concepto que interviene en la descomposición.

FACTOR: Factor de rendimiento, por defecto 1.0

RENDIMIENTO: Número de unidades, rendimiento o medición.

Cuando CODIGO_HIJO es un porcentaje, éste tiene tres partes:

1. Prefijo que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un juego de caracteres que puede ser:

'&' para porcentajes acumulables.

'%' para porcentajes no acumulables expresados en tantos por uno.

3. El resto del código permite diferenciar un porcentaje de otro.

Ejemplo: LD%N0001

LD - Sobre todas las líneas anteriores cuyo código comience por LD

% - No acumulable en tanto por uno.

N0001 - código diferenciador.

El rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la


actual y que queden afectadas por la máscara.

Ejemplo de una línea de descomposición: L%N004 \\0.03\

Esta línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo código comience por L y cuyo

Especificación FIEBDC-3/98 / 613


texto estará en la definición del código 'L%N004'.

Registro tipo añadir descomposición


Con este registro se pueden añadir líneas de descomposición, el registro tipo ~D
cambia la descomposición completa. Para añadir conceptos nuevos a una base de
datos, además de definir los registros C,T,L,D,... deberíamos posicionar los nuevos
conceptos en el capítulo o capítulos donde queramos situarlos, para ello, es necesario
un registro que nos permita añadir una o varias líneas de descomposición por cada
capítulo donde queramos posicionar un nuevo concepto.

~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

Todos los campos tienen el mismo significado que en el registro tipo D.

Registro tipo texto


Este registro contiene el texto descriptivo de un concepto

~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

CODIGO_CONCEPTO: código del concepto descrito

TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de tamaño. El


texto podrá contener caracteres fin de línea (ASCII-13 + ASCII-10) que se
mantendrán al reformatearlo.

Registro tipo descripción paramétrica


Este registro contiene la descripción paramétrica, bien en formato tradicional bien
en formato API para DLL, que incluye la definición de parámetros, descomposiciones,
comentario de ayuda a la selección de parámetros, resúmenes, textos, pliegos, claves
e información comercial, en función de tablas, expresiones y variables, para una
familia de conceptos.

Este registro puede adoptar dos formas:

~P | CODIGO_FAMILIA | DESCRIPCION_PARAMÉTRICA |

Cuando CODIGO_FAMILIA está lleno, o bien DESCRIPCION_PARAMÉTRICA está llena,


o bien DESCRIPCION_PARAMÉTRICA está vacía. En éste último caso se accede a la
descripción paramétrica de la familia a través del archivo NOMBRE.DLL.

~P | | DESCRIPCION_PARAMÉTRICA | NOMBRE.DLL |

Cuando CODIGO_FAMILIA está vacío, se refiere al paramétrico global.

Si DESCRIPCION_PARAMÉTRICA está llena, el paramétrico global se establece a


partir de ésta. Si DESCRIPCION_PARAMÉTRICA está vacía y NOMBRE.DLL está lleno,
se establece a partir de éste. Si DESCRIPCION_PARAMÉTRICA y NOMBRE.DLL están
llenos a la vez, tan solo es válida DESCRIPCION_PARAMÉTRICA.

CODIGO_FAMILIA: código del concepto tipo familia descrito. Si se utiliza un modelo de


codificación dependiente de los parámetros (ver Anexos 2 y 3), este código debe poseer
un carácter '$' en su séptima posición, y los conceptos en los que se deriva tendrán

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 614


como código los seis primeros caracteres del mismo más un carácter adicional por
cada parámetro que posea.

DESCRIPCION_PARAMÉTRICA: Ver Anexo 2.

NOMBRE.DLL: Ver Anexo 3.

REGISTRO TIPO PLIEGOS

Este registro contiene las diferentes secciones y textos del pliego de condiciones de
un concepto. El pliego de condiciones se estructura de forma jerárquica con el
Sistema de Clasificación por Codificación y de forma facetada en varias secciones de
distinto contenido.

Secciones de los pliegos


Cuando el primer campo del registro ~L está vacío, el registro define los códigos de las
secciones de cada pliego y sus rótulos correspondientes. Este registro es único para
una base de datos u obra.

~L | | { CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO \ } |

CODIGO_SECCION_PLIEGO: código que define cada sección o faceta del pliego.

ROTULO_SECCION_PLIEGO: definición del rótulo asociado a cada código


correspondiente de cada sección o faceta del pliego.

Ejemplo de las secciones de los pliegos definidas para la Base de Datos de


construcción de la Comunidad de Madrid y la Base de Datos de construcción de la
Comunidad Valenciana, indicando código y rótulo de la sección:
~L| | DES\ DESCRIPCIÓN Y COMPLEMENTOS AL TEXTO

\PRE\ REQUISITOS PREVIOS A LA EJECUCIÓN

\COM\ COMPONENTES

\EJE\ EJECUCIÓN Y ORGANIZACIÓN

\NOR\ NORMATIVA

\CON\ CONTROL Y ACEPTACIÓN

\SEG\ SEGURIDAD E HIGIENE

\VAL\ CRITERIOS DE VALORACIÓN Y MEDICIÓN

\MAN\ MANTENIMIENTO

\VAR\ VARIOS \ |

MODELO 1 DE TEXTOS DE LOS PLIEGOS.

Cuando el primer campo del registro ~L no está vacío, identifica a un concepto


determinado. Puede haber un registro de este tipo por cada concepto de una base de
datos u obra.

~L | CODIGO_CONCEPTO | {CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO \


}|

Especificación FIEBDC-3/98 / 615


CODIGO_CONCEPTO: código del concepto descrito, contenido en la base de datos.

CODIGO_SECCION_PLIEGO: definición del código asociado a cada pliego.

TEXTO_SECCION_PLIEGO: Texto asignado a cada faceta o sección del pliego de


condiciones del concepto.

El pliego de condiciones de cada concepto estará dividido con caracteres '\' en varias
secciones o facetas, pensadas para imprimirse juntas o por separado.

Los fines de línea de cada sección del pliego se tratarán como en el REGISTRO TIPO
TEXTO.

MODELO 2 DE TEXTOS DE LOS PLIEGOS.

Otra opción permite asignar el Pliego mediante párrafos de texto asociados a


conceptos, utilizando el siguiente esquema de registros, como forma alternativa a la
anterior:

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO \


{ ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |

código_concepto: código del concepto descrito, contenido en la base de datos. Será


único para cada registro ~Q.

Este registro es de sustitución de la información, no es de acumulación.

Codigo_sección_pliego: definición del código asociado a cada pliego. Corresponde al


definido en el registro de cabecera de pliego ~L.

CODIGO_PARRAFO: código del texto asociado a cada sección del pliego.

ABREV_AMBITO: Identificador del ámbito geográfico de la sección del pliego. Se define


en un registro propio.

TEXTO_PARRAFO: Texto que define el contenido de los pliegos que se asocian a un


concepto y se identifica con CODIGO_PARRAFO.

TEXTO_PARRAFO_RTF: Texto que define el contenido de los pliegos que se asocian a


un concepto y se identifica con CODIGO_PARRAFO, con formato RTF, de forma
opcional, siendo siempre obligatorio el campo TEXTO_PARRAFO.

Registro tipo ámbito geográfico


Establece el ámbito geográfico correspondiente a los Pliegos de Condiciones asociados
a la Base de Datos. No necesariamente deberá corresponder al campo CABECERA
definido en el registro ~V.

~W | { ABREV_AMBITO \ AMBITO \ } |

ABREV_AMBITO: Nombre abreviado que identifica el territorio geográfico al que se


refiere. (Comunidad Autónoma, Provincia, Región, Comarca, Localidad, etc.). El
identificador < * > (ASCII - 42) indica AMBITO_GENERAL, y representa todo el

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 616


territorio nacional.

AMBITO: Nombre completo del territorio geográfico.

Existe una relación de abreviaturas recomendadas, elaborada por la Asociación de


Redactores de Bases de Datos de construcción.

Registro tipo información gráfica


~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

CODIGO_CONCEPTO: código del concepto descrito en la base de datos y contenido en


ella.

ARCHIVO_GRAFICO. EXT: Nombre del archivo que contiene la información gráfica. Se


usarán como referencia programas estandarizados de uso general, para chequear y
verificar el contenido del archivo. Estos programas serán:

Archivos tipo ráster: Extensión .BMP, .PCX : Windows 3.1

Archivos vectoriales: Extensión .WMF : Windows 3.1

Extensión .DXF : Autocad 12 Windows

Registro tipo entidad


Define las entidades suministradoras de documentación técnica, tarifas de precios y
especificaciones de los conceptos contenidos en la Base de Datos.

~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO \ SUBNOMBRE

\ DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAIS \ { TELEFONO; }

\ { FAX; } \ { PERSONA_CONTACTO; } \ } |

CODIGO_ENTIDAD: código del SCc que define a la entidad (empresa, organismo, etc.).

RESUMEN: Nombre abreviado de la entidad

NOMBRE: Nombre completo de la entidad.

TIPO: Se definen los siguientes:

C central.

D delegación.

R representante.

SUBNOMBRE: Nombre de la delegación o representante en caso de que sea distinto


de la central. Normalmente estará vacío.

DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS: Dirección postal de la entidad


con todos sus datos, existiendo una dirección por cada subcampo tipo, de forma
ordenada y secuencial.

TELÉFONO: Números de teléfono de la entidad, de forma ordenada y secuencial

Especificación FIEBDC-3/98 / 617


respecto al subcampo tipo, separados con el carácter < ; > (ASCII-59). Se indicará con
nueve caracteres numéricos, incluido el prefijo de la provincia.

FAX: Números de fax de la entidad, con las mismas especificaciones que el campo
anterior.

PERSONA_CONTACTO: Nombre de las personas de contacto con la entidad y cargo que


desempeña, podrá haber varias asociadas a cada subcampo tipo, de forma que estén
separadas por el carácter ASCII-59.

Registro tipo relación comercial


Este registro establece los vínculos entre los conceptos de una Base de Datos General
( BDG ) con los productos comerciales de una Base de Datos Específica ( BDE ), y/o
viceversa.

Así una Base de Datos ( BD ) podrá contener CONCEPTOS genéricos de una BDG,
CONCEPTOS referentes a productos comerciales de una BDE, o ambas a la vez.

~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | |

{ CODIGO_ARCHIVO \ CODIGO_ENTIDAD # CODIGO_CONCEPTO \ } |

CODIGO_RAIZ_BD # CODIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CODIGO_RAIZ_BD: Se refiere a la identificación del código de la entidad que


elabora la BD. Este código debe ser facilitado por la entidad que elabora la BD,
para evitar ambigüedades.

CODIGO_CONCEPTO: Se refiere a un concepto que pertenece a


CODIGO_RAIZ_BD, y empleado por ésta en su sistema de clasificación por
codificación.

CODIGO_ARCHIVO: Se refiere al nombre del archivo que, de existir, indica el lugar


donde se encuentra la información referente a CODIGO_ENTIDAD #
CODIGO_CONCEPTO. Sin embargo si dicho CODIGO_ARCHIVO no existe, entonces
indica que CODIGO_ENTIDAD # CODIGO_CONCEPTO se encuentra en la misma BD.

CODIGO_ENTIDAD # CODIGO_CONCEPTO: Identificador de un concepto de una BD,


donde:

CODIGO_ENTIDAD: Se refiere a la identificación del código de la entidad a la


que se le asocia información. Este código debe ser facilitado por la entidad que
elabora la BD, de acuerdo con su sistema de clasificación, para evitar
ambigüedades.

CODIGO_CONCEPTO: Se refiere a un concepto que pertenece a


CODIGO_ENTIDAD, y empleado por la entidad que elabora la BD en su sistema
de clasificación por codificación.

Cuando CODIGO_CONCEPTO se refiera a un producto comercial, dicho código deberá


ser facilitado por el fabricante, y no podrá coincidir nunca con la designación de
CODIGO_RAIZ_BD, CODIGO_ENTIDAD o CODIGO_CONCEPTO, cuando éste se refiere

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 618


a un concepto genérico. Al tener dicho producto comercial un tratamiento de
CONCEPTO, éste puede utilizar todos los registros existentes en el formato para
especificar su información asociada (precio, información gráfica, etc.).

Registro tipo información técnica


Este registro contiene la especificación de otros datos referentes al concepto, como
por ejemplo, peso específico o nominal, características físicas, cuantías geométricas,
propiedades físico - mecánicas, etc.

Estos datos podrían emplearse en otras utilidades, como el cálculo de los coeficientes
de transmisión térmica, aislamiento acústico, etc.

El registro tipo información Técnica puede adoptar dos formas:

Si el primer campo está vacío, éste sirve como diccionario de términos de


información Técnica a los cuales se les podrá asociar una descripción y una unidad
de medida.

~X | | { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |

Si el primer campo identifica a un concepto, la información que se especificará a


continuación serán la/las parejas de términos de información técnica con sus
respectivos valores.

~X | CODIGO_CONCEPTO | { CODIGO_IT \ VALOR_IT \ } |

CODIGO_IT: código de la información Técnica descrita.

DESCRIPCION_IT: Texto descriptivo de la información Técnica, sin limitación de


tamaño.

UM: En el caso que los valores de la información Técnica sean valores numéricos, se
indicará su Unidad de Medida, de acuerdo con el Sistema Internacional de Unidades
de Medida.

CODIGO_CONCEPTO: código del concepto descrito, contenido en la base de datos.


Será único para cada registro ~X.

VALOR_IT: Valor alfabético o numérico de la información Técnica.

Registro tipo coeficientes


Indica el número de decimales en cada campo numérico.

~K | DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM | CI |

DN : Decimales del campo número de partes iguales de la hoja de mediciones.

DD : Decimales de Dimensiones de las tres magnitudes de la hoja de mediciones.

DS : Decimales de la línea de subtotal o total de mediciones

DR : Decimales de rendimiento y factor en una descomposición.

DI : Decimales del importe resultante de multiplicar rendimiento x precio del

concepto.

Especificación FIEBDC-3/98 / 619


DP : Decimales del importe resultante del sumatorio de los costes directos del

concepto.

DC : Decimales del importe total del concepto. (CD+CI).

DM : Decimales del importe resultante de multiplicar la medición total del concepto

por su precio.

CI : Porcentaje de costes indirectos.

Registro tipo mediciones


En este registro figuran las mediciones (cantidades), en que interviene un concepto
de un presupuesto en la descomposición de otro de mayor rango.

En el intercambio de archivos de presupuestos, deberá figurar siempre este registro,


exista o no desglose de mediciones.

Cuando se trate de intercambiar una relación de registros ~M que recogen un listado


de mediciones no estructurado, no es necesario la disposición de un código raíz ni los
registros ~D complementarios. El operador indicará en estos casos cual es el destino
de la medición.

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION_TOTAL

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

CODIGO_PADRE: código del concepto padre o concepto descompuesto del presupuesto.

CODIGO_HIJO: código del concepto hijo o concepto de la línea de descomposición.

Este campo es opcional en el caso de intercambiar mediciones no estructuradas, es


decir, que no pertenecen a la estructura general y completa de un presupuesto.

POSICIÓN: Posición del CONCEPTO_HIJO en la descomposición del


CONCEPTO_PADRE, este dato permite identificar la medición cuando la
descomposición del concepto padre incluye varios conceptos hijo con el mismo código,
la numeración de las posiciones comenzará con el 1.

El campo POSICIÓN deberá especificarse siempre en intercambio de presupuestos


cuando éste sea completo y estructurado, e indicará el camino completo de la
medición descrita en la estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la
medición correspondiente al capítulo 3 del archivo; subcapítulo 5 del capítulo 3; y
partida 2 del subcapítulo 5. En mediciones no estructuradas este campo es opcional.

MEDICION_TOTAL: Debe coincidir con el rendimiento del registro tipo '~D'


correspondiente.

Incorpora el sumatorio del producto de unidades, longitud, latitud y altura o el


resultado de expresiones de cada línea, al leer este registro se recalculará este valor.

TIPO: Indica el tipo de línea de medición de que se trate. Usualmente este subcampo
estará vacío. Los tipos establecidos en esta versión son:

Subtotal parcial: En esta línea aparecerá el subtotal de las líneas anteriores desde

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 620


el último subtotal hasta la línea inmediatamente anterior a ésta.

Subtotal acumulado: En esta línea aparecerá el subtotal de todas las líneas


anteriores desde la primera hasta la línea inmediatamente anterior a ésta.

Expresión: Indicará que en el subcampo COMENTARIO aparecerá una expresión


algebraica a evaluar. Se podrán utilizar los operadores '(', ')', '+', '-', '*', '/' y '^'; las
variables 'a', 'b', 'c' y 'd' (que tendrán por valor las cantidades introducidas en los
subcampos UNIDADES, LONGITUD, LATITUD y ALTURA respectivamente); y la
constante 'p' para el valor Pi=3.1415926. Si la expresión utiliza alguna variable,
ésta será válida hasta la siguiente línea de medición en la que se defina otra
expresión.

COMENTARIO: Texto en la línea de medición. Podrá ser un comentario o una


expresión algebraica.

UNIDADES, LONGITUD, LATITUD, ALTURA: Cuatro número reales con las


mediciones. Si alguna magnitud no existe se dejará este campo vacío.

Registro tipo añadir mediciones


Igual que el registro tipo ~M pero añade las líneas de medición de este registro a las
ya existentes en vez de substituir toda la medición como hace en aquel.

~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } |MEDICION

| {TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

Registro tipo claves


Este registro establece la relación entre códigos y descriptores del tesauro, para
permitir la búsqueda de conceptos mediante términos clave.

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |

CODIGO_CONCEPTO: código del concepto descrito en la base de datos y contenido en


ella.

CLAVE_TESAURO: Términos clave relacionados con el concepto. Los términos


compuestos (hormigón armado, cartón - yeso, mortero mixto) se identificarán unidos
mediante < _ > (ASCII - 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No
está permitido el empleo del espacio en blanco.

Registro tipo cambio de código


Con este registro se posibilita el cambio o anulación de los códigos de los conceptos,
única unidad de información que no se podía modificar con los registros definidos
anteriormente.

~B | CODIGO_CONCEPTO | CODIGO_NUEVO |

CODIGO_CONCEPTO: código del concepto a cambiar o anular. Debe existir y


pertenece a un concepto contenido en la BD

CODIGO_NUEVO: Nuevo código para CODIGO_CONCEPTO, no debe existir

Especificación FIEBDC-3/98 / 621


previamente. Si este campo está vacío, se entiende que hay que eliminar
CODIGO_CONCEPTO

Resumen de tipos de registros


Los registro comentados ampliamente en la especificación son:

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \ DDMMAA |


PROGRAMA_EMISION | [CABECERA] \ { ROTULO_IDENTIFICACION \ } |
JUEGO_CARACTERES |

~C | {CODIGO \ } | UNIDAD | RESUMEN | { PRECIO \ } | { FECHA \ } | TIPO |

~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

~P | CODIGO_FAMILIA | DESCRIPCION_PARAMÉTRICA |

~P | | DESCRIPCION_PARAMÉTRICA | NOMBRE.DLL |

~L | | { CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO \ } |

~L | CODIGO_CONCEPTO |
{CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO \ } |

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO \


{ ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |

~W | { ABREV_AMBITO \ AMBITO \ } |

~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO \ SUBNOMBRE\


DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS \ { TELÉFONO; } \ { FAX; } \
{ PERSONA_CONTACTO; } \ } |

~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | | { CODIGO_ARCHIVO \


CODIGO_ENTIDAD # CODIGO_CONCEPTO \ } |

~X | | { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |

~X | CODIGO_CONCEPTO | { CODIGO_IT \ VALOR_IT \ } |

~K | DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM | CIE |

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \


COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 622


~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \
COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |

~B | CODIGO_CONCEPTO | CODIGO_NUEVO |

Procedimiento de lectura de descomposiciones paramétricas


Un concepto paramétrico es el que define su CODIGO, resumen, texto, pliego,
descomposición e INFORMACION comercial de forma paramétrica, esto es, de una
forma variable mediante tablas y expresiones aritméticas y lógicas función de
parámetros.

En la descripción paramétrica se encuentran las siguientes sentencias:

Se definen las variables:

%A %B %C %D Parámetros seleccionados del concepto, de "a" a "z" ~ 1 a 26.

%O %P %Q %R Parámetros seleccionados de la obra, de "a" a "z" ~ 1 a 26.

%E Variable que define las condiciones de error.

$A $B $C $D Textos de los parámetros seleccionados del concepto.

$O $P $Q $R Textos de los parámetros seleccionados de la obra.

$E Variable que define los textos de error.

De forma equivalente las variables %O a %R y $O a $R tomarían el valor


correspondiente a los valores de los parámetros generales de la obra.

Cualquier variable de la 'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se puede
definir o redefinir con cualquier número de dimensiones para ser utilizada
posteriormente en expresiones.

Se definen las constantes de la 'a' a la 'z' con los valores numéricos del 1 al 26
respectivamente, para permitir referenciar los parámetros de forma nemotécnica. Para
la utilización de otro tipo de caracteres, se determinará en el texto de la opción del
parámetro seleccionado el carácter de sustitución que se desea utilizar, anteponiéndole
un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se realiza
relacionando el carácter con la posición que ocupa.

Ejemplo: PBPO.2$ M3 Hormigón $B $A

\ CONSISTENCIA \ plástica \ fluida \ blanda \

\ RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \

El derivado PBPO.2aa sería: M3 Hormigón H-125 plástica

Especificación FIEBDC-3/98 / 623


Con el carácter especial:

\ CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \

\ RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \

El mismo derivado sería: PBPO.2p2 M3 Hormigón H-125 plástica.

Las variables numéricas deben permitir valores reales en coma flotante de doble
precisión (64bits) y las variables alfanuméricas deben poder almacenar textos de
cualquier tamaño.

Cualquier variable puede definirse, en la misma asignación, con cualquier número y


tamaño de dimensiones (hasta 4), en la DEFINICIÓN de dimensiones tendrán que
hacerse explícitas todas las dimensiones.

%U=...... # define una variable con un dato numérico

$X(8)=..... # define una lista de 8 datos alfanuméricos

%V(3,4)= ..... # define una tabla con 3 filas y 4 columnas de datos n.

Las variables %E y $E son especiales para devolver errores producidos por selecciones
de parámetros no coherentes. En una evaluación secuencial de expresiones, si en una
expresión la variable %E adopta un valor distinto de 0, ha habido algún error, se
interrumpe la evaluación de expresiones y se presenta el contenido de la variable $E
donde se almacena el texto del error producido.

Pueden haber múltiples asignaciones de %E, cada una de ellas precedida de su


correspondiente texto de error, asignación de $E.

Las constantes alfanuméricas se definirán entre comillas ($I="incluida parte


proporcional").

En la descripción paramétrica podemos encontrar los siguientes tipos de sentencias:

SENTENCIA DE ROTULOS DE PARÁMETRO:

\ <ROTULO del parámetro> \ { <ROTULO de la opción> \ }

Los parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el orden
que se encuentren.

SENTENCIA DE ASIGNACIÓN NUMÉRICA:

<variable numérica> = <expresión numérica>

SENTENCIA DE ASIGNACIÓN ALFANUMÉRICA:

<variable alfanumérica> = <expresión alfanumérica>

SENTENCIA DE RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)

<texto de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ] Se pueden


definir uno u opcionalmente dos rendimientos, el defecto del rendimiento opcional es 1.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 624


SENTENCIA DE MEDIOS AUXILIARES:

%: <expresión numérica> (en tanto por cien)

%%: <expresión numérica> (en tanto por uno)

SENTENCIA DE PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>

En caso de figurar conjuntamente un juego de sentencias de rendimiento a modo de


descomposición y una sentencia de precio, tendrá prioridad la sentencia de precio,
ignorando las sentencias de rendimiento.

SENTENCIA DE COMENTARIO:

\ COMENTARIO \ ó \ C \ <texto del comentario> \

Si existe texto de comentario, se presentará como ayuda a la selección de parámetros


junto a las opciones de éstos.

SENTENCIA DE SUSTITUCION:

\ RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \

\ TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \

\ PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }

\ CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }

\ COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\ <expresión_numérica>\}

Se considera que una sentencia continua en la línea siguiente si:

. Acaba en un operador

. Acaba sin cerrar comillas '"'

. Comienza con '\' y no acaba con '\'

<constantes> PI, números, "texto" ...

<funciones> ABS( ), INT( ), SQRT( ) ...

<variables> [$%] [A-Z] [(dimensión{,dimensión})]

<expresión numérica>:

Son aquellas que dan como resultado un número en función de constantes y variables
numéricas, expresiones lógicas, funciones y operadores.

por ejemplo: %I= %A + 3.17*(1+%B) + ABS(%P+3.15*%Q)/12000

<expresión alfanumérica>:

Son aquellas que dan como resultada un texto en función de constantes y variables
alfanuméricas, operadores y funciones numéricas.

Especificación FIEBDC-3/98 / 625


Una expresión alfanumérica puede incluir expresiones lógicas.

por ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)

añadir " de perdidas" a $I si el valor actual de %A es mayor que <a> ó 1.

<expresiones lógicas>:

Son aquellas que dan como resultado VERDADERO o FALSO. En expresiones numéricas
el verdadero se considera como 1 y el falso como 0, en alfanuméricas el falso se
considera suprimir texto.

%I = 323*(%A=a) + 345*(%A=b) + 1523*($I=$A & $J=$B)

$I = "blanco"*(%C=c) + "negro"*(%C=d)

<texto de sustitución>:

En los textos de sustitución la INFORMACION es un texto constante (sin comillas) con


variables embebidas en él. Se consideran variables los caracteres $ y %
inmediatamente seguidos por una letra de la A hasta la Z.

En los textos de sustitución, las variables alfanuméricas se sustituyen por sus


contenido de texto correspondiente, las numéricas se sustituyen por las constantes de
la "a" a la "z" correspondientes al valor numérico de su contenido.

En la expresión del rendimiento, la primera parte de la sentencia es un texto de


sustitución que una vez sustituidas las variables será el CODIGO del concepto al que le
corresponde la expresión numérica de la segunda parte de la expresión como
rendimiento. Si el resultado es 0, se ignora la sentencia y no se considera ese
componente o línea de descomposición.

CONVENIOS DE NOTACIÓN (EBNF)

[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

[a-b] Indica cualquier valor desde "a" a "b" inclusivas

[abc] Indica cualquiera de los valores a, b ó c

<abc> Indica descripción informal

abc Indica símbolo terminal

%[A-Z] Variable numérica

$[A-Z] Variable alfanumérica

Variables predefinidas:

[%$][ABCD] Parámetros del concepto

[%$][OPQR] Parámetros de la obra

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 626


[%$]E Variable especial para reportar errores

[%$][A-Z][(dim{,dim})] Variables definibles

# Comentarios (el texto comprendido entre este carácter y el siguiente final de línea
exclusive, no se tiene en cuenta)

, Separador de datos

: DEFINICIÓN de rendimiento

:: DEFINICIÓN de precio

%: DEFINICIÓN de medios auxiliares en tanto por cien

%%: DEFINICIÓN de medios auxiliares en tanto por uno

OPERADORES NUMÉRICOS (De menor a mayor precedencia)

+ Suma

- Resta

* Multiplicación

/ División

^ Operador elevado a

OPERADORES LÓGICOS (De menor a mayor precedencia)

@ Operador lógico O

& Operador lógico Y

< Menor

> Mayor

<= Menor o igual

>= Mayor o igual

= Igual

<> Diferente

! Operador lógico NO

FUNCIONES -- VALOR RETORNADO:

ABS(n) Valor absoluto de "n"

INT(n) Parte entera de "n"

ROUND(n,d) Redondeo de "n" a "d" decimales

Especificación FIEBDC-3/98 / 627


SIN(n) Seno (grados sexagesimales)

COS(n) Coseno (grados sexagesimales)

TAN(n) Tangente (grados sexagesimales)

ASIN(n) Arco seno (gs)

ACOS(n) Arco coseno (gs)

ATAN(n) Arco tangente (gs)

ATAN2(x,y) Arco tangente con dos parámetros "x" e "y"

SQRT(n) Raíz cuadrada de "n"

ATOF(a) Conversión de alfanumérico "a" a numérico

FTOA(n) Conversión de numérico "n" a alfanumérico

Cada instrucción irá en distinta línea, a menos que la instrucción acabe en un


operador en cuyo caso se considera que sigue en la siguiente línea.

Si una línea acaba sin haber cerrado las comillas '"' o delimitador '\', se considerará
que sigue en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.

Control de errores de selección


Es frecuente encontrar un gran número de combinaciones de parámetros posibles
pero tener pocas de ellas resueltas. Para evitar que el operador del sistema pruebe
distintas combinaciones de parámetros consiguiendo en todas ellas un mensaje de
error, el sistema debe ser capaz de guiarle en la selección de combinaciones
correctas.

Cada vez que el operador define un parámetro, el sistema evaluará todas las
sentencias posibles y en las sentencias del tipo: %E= ...., función de parámetros

Si todos los parámetros que intervienen en la expresión son conocidos, se evaluará


ésta y si el resultado fuera de ERROR se presentará la previa DEFINICIÓN de $E con
el mensaje del error.

Si todos los parámetros menos uno son conocidos, se irá dando valores al parámetro
desconocido y evaluando la expresión hasta recorrer todos los valores válidos del
parámetro. De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.

Cada vez que se defina o redefina un parámetro el sistema actualizará todos los
valores marcados en pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de
las opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.

Este sistema de control de errores de selección es sencillo de implementar en


cualquier soporte, pero obliga a los redactores de los descompuestos paramétricos a

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 628


definir explícitamente las combinaciones de parámetros incorrectas, ya que con este
método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios paramétricos.

Procedimiento de lectura de descripciones paramétricas


Recorrer la descripción paramétrica ejecutando los siguientes pasos:

Eliminar desde el carácter '#' inclusive hasta el siguiente cambio de línea exclusive.

Cambiar tabuladores (9) por caracteres ' ' (32)

Eliminar caracteres ' ' (32) delante y detrás de los caracteres '\'

Unir líneas, eliminando el fin de línea, en líneas que comienzan con '\' y no acaban
con '\', que terminan con un operador y en la separación de datos de una variable
matricial.

Eliminar todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o delimitadas
(\...\)

Eliminar líneas vacías.

Leer y evaluar secuencialmente las sentencias de la forma:

Si la sentencia comienza con '\' leer el ROTULO hasta el siguiente '\', si el ROTULO
es:

COMENTARIO ó C- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como comentario a la selección de parámetros.

RESUMEN ó R- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como el texto de sustitución del resumen del concepto.

TEXTO ó T- Palabra o carácter reservado que identifica el siguiente ROTULO entre '\'
como el texto de sustitución del texto descriptivo del concepto.

PLIEGO ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de las distintas secciones del pliego.

CLAVES ó K- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de los términos claves asociados al concepto.

COMERCIAL ó F - Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución y tarifas de la INFORMACION comercial del
concepto.

Cualquier otro ROTULO identificará el nombre del siguiente parámetro y los


siguientes ROTULOs entre '\' como los ROTULOs de las opciones de dicho parámetro.

Si la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.

Si la sentencia comienza con '%:' el resto de la misma debe ser una expresión

Especificación FIEBDC-3/98 / 629


numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.

En otro caso si la sentencia contiene el carácter ':' la parte anterior a él es un texto


de sustitución del CODIGO de una línea de descomposición y la posterior una
expresión numérica, o dos separadas por ':', indicadoras de el o los rendimientos de
dicha línea de descomposición.

En aquellos casos donde pueda aparecer un carácter '%' seguido de un carácter


alfabético que se considere como tal y no como una variable de sustitución, deberá
emplearse '%%', para evitar la ambigüedad que se puede producir entre una variable
numérica que deba ser sustituida, una sentencia de medio auxiliar o un texto.

El resto de sentencias deberán ser de asignación de la forma variable/s = expresión/


es

Resumen de tipos de sentencias


Después de realizado el filtro descrito arriba, cada línea, tira de caracteres acabada
en (ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:

{ \ ROTULO_parámetro \ { opción_parámetro \ } (13)(10) }

{ variable = expresión (13)(10) }

{ CODIGO : rendimiento [ : rendimiento ] (13)(10) }

[ %: ó %%: medios_auxiliares (13)(10) ] % (tanto por cien) %% (tanto por uno)

[ :: expresión_precio (13)(10) ]

[ \ COMENTARIO \ ó \ C \ texto_comentario \ (13)(10) ]

[ \ RESUMEN \ ó \ R \ texto_resumen \ (13)(10) ]

[ \ TEXTO \ ó \ T \ texto_descriptivo \ (13)(10) ]

[ \ PLIEGO \ ó \ P \ { texto_faceta_pliego \ }(13)(10) ]

[ \ CLAVES \ ó \ K \ { término_clave \ }(13)(10) ]

[ \ COMERCIAL \ ó \ F \ { CODIGO_producto_comercial \ tarifa \ } (13)(10) ]

API estándar FIEBDC-3/98 para descr. param. compiladas en DLL

27 de febrero de 1997

Introducción
Debido a la necesidad expuesta por los desarrolladores de bases de datos
paramétricas de ampliar las posibilidades del lenguaje de descripción paramétrica,

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 630


poder compilar éste por eficiencia y protección de datos y posibilitar la protección
contra copia de bases de datos paramétricas, se establece la siguiente especificación.

En este documento se definen los componentes necesarios para el desarrollo de


descripciones paramétricas en cualquier lenguaje de aplicaciones para Windows (C,
C++, Pascal, Fortran, etc.) y sin ninguna limitación. Se incluye la definición de un
API estándar en C, un ejemplo de base de datos en formato DLL de 32 bits
desarrollado en C++ y un ejemplo de aplicación con la implementación del interfaz
con el API en C, definidos ambos en Microsoft Visual C++. Se podría implementar el
interfaz con el API para otros compiladores y lenguajes para acceder a las mismas
DLL.

Es decir; es posible construir una base de datos que cumpla este API utilizando para
ello cualquier lenguaje de programación que permita desarrollar librerías de enlace
dinámico Windows (DLL). Asimismo, es posible construir un programa que lea
cualquier base de datos de estas características utilizando lenguajes de aplicaciones
para Windows.

Archivos que debe contener una Base de datos

Una base de datos que se desee distribuir con las definiciones paramétricas
compiladas en DLL, debe contener los siguientes archivos:

base.dll En este archivo, único para cada base de datos y de nombre cualquiera pero
extensión ‘..DLL’, se encuentran las funciones del API que la base de datos
ofrece a las aplicaciones para que éstas obtengan la información que
contiene la base.

base.bc3 Archivo o archivos ASCII de la base de datos en formato FIEBDC-3/98. Los


registros '~P' de los conceptos cuya descripción paramétrica se acceda a
través del archivo ‘base.dll’, tendrán el campo
‘DESCRIPCIÓN_PARAMÉTRICA’ vacío. Ejemplo:

~P|ABCD12$| |

El registro '~P' correspondiente al paramétrico global, tendrá el campo


‘DESCRIPCIÓN_PARAMÉTRICA’ vacío, y tendrá un tercer campo con el nombre del
archivo DLL en el que se encuentren las funciones del API de la base. Ejemplo:

~P| | | BASE.DLL |

La definición paramétrica de los conceptos implementados de esta forma podrá estar


en el mismo archivo que las funciones del API (el archivo ‘base.dll’) o situado en otro
u otros archivos cualesquiera, conforme desee el desarrollador de la base de datos.
Las aplicaciones sólo accederán a las funciones del API incluidas en el archivo ‘base.
dll’, y éstas serán las encargadas de acceder a la información en la forma que el
desarrollador de la base implemente.

Definición del API: fiebdc.h


Único archivo que define el estándar. En este archivo se define el API en C, que las
descripciones paramétricas en DLL ofrecen a las aplicaciones. Este interfaz permite
definiciones paramétricas de ilimitado número de parámetros e ilimitadas opciones
por parámetro. Se soportan dos modelos de codificaciones:

Especificación FIEBDC-3/98 / 631


Un modelo de codificación independiente de parámetros, en el que el código de un
concepto paramétrico es completamente libre y el número de caracteres del código es
independiente del número de parámetros.

Un modelo dependiente de los mismos. Es el modelo que definía FIEBDC-3/95 y en el


que el código de un concepto paramétrico debe tener un símbolo ‘$’ en su séptima
posición y en el que se asigna de la 'a' a la 'z' las opciones 0 a 25 de cada parámetro,
ampliándose en esta versión con los rangos 'A' a 'Z' y '0' a '9' para que el número de
opciones por parámetro en este modelo codificación pase a 62 (de 0 a 61).

Para que los programas puedan determinar si una base de datos responde a uno u
otro modelo, se ha definido la función BdcCodificacion(), que se especifica más
adelante y que indica si el sistema de codificación usado en la base de datos es
dependiente o independiente.

Si se adopta el primer modelo, no es posible averiguar ‘a priori’, a partir de un código


‘ABCDEFGHIJ’ de concepto, si éste es un derivado paramétrico ni de que concepto
paramétrico procede o con qué valores de sus parámetros. Por ello, es establece el
siguiente criterio de búsqueda:

Si el concepto existe con este código en la base, se escogerá dicho concepto.

En caso de no existir, se intentará localizarlo en la base de datos como perteneciente


a un concepto paramétrico ‘al estilo’ FIEBDC-3/95. En el ejemplo, se intentará buscar
el concepto paramétrico ‘ABCDEF$’ y pasarle los parámetros ‘GHIJ’ (que implica
pasarle a sus cuatro parámetros valores ‘31’, ‘32’, ‘33’ y ‘34’ respectivamente).

En caso de no existir, se intentará localizarlo en la DLL. Si ésta posee un modelo de


codificación dependiente, se utilizará el mismo criterio que en el punto anterior: en
el ejemplo, buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los parámetros ‘GHIJ’.
Si la base posee un modelo independiente, se utilizará la función ‘BdcDecodifica()’, tal
como se especifica más adelante.

Si no se cumplen ninguna de las condiciones anteriores, se supone que el concepto


no existe en la base.

El archivo ‘fiebdc.h’ tiene el siguiente contenido:

/* FORMATO DE INTERCAMBIO ESTÁNDAR DE PARAMÉTRICOS EN DLL */


/* FIEBDC-3/98 */
#include <windows.h>
#ifndef FIEBDC_H
#define FIEBDC_H
#ifdef BASE /* definido si se desea construir la DLL */
/****************************************************************************/
/* PARTE DEL ARCHIVO NECESARIA PARA LOS DESARROLLADORES DE BASE DE DATOS */
/****************************************************************************/
/****************************************************************************/
/* MACROS DEPENDIENTES DEL COMPILADOR */

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 632


#if defined (__BORLANDC__) /* Borland C++ */
#define EXPORTA FAR _export
#elif defined (_MSC_VER) /* Microsoft C */
#define EXPORTA
#else /* Otros */
#define EXPORTA
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* 0 FUNCIONES GENERALES *************************************************/
LONG EXPORTA BdcCodificacion (VOID);
/* 1 FUNCIONES REFERENTES AL PARAMÉTRICO GLOBAL *************************/
/* 1.1 Accesibles en cualquier momento */
/* 1.1.1 Obtención de sus parámetros */
LONG EXPORTA BdcGloParNumero (VOID);
LONG EXPORTA BdcGloOpcNumero (LONG par);
LPCSTR EXPORTA BdcGloParRotulo (LONG par);
LPCSTR EXPORTA BdcGloOpcRotulo (LONG par, LONG opc);
/* 2.1.3 Mensajes / códigos de error */
BOOL EXPORTA BdcGloError (LPCSTR *err);
/* 1.1.2 Asignación de opciones a los parámetros */
BOOL EXPORTA BdcGloCalcula (LPLONG opcl);
/* 2 FUNCIONES REFERENTES AL RESTO DE PARAMÉTRICOS ***********************/
/* 2.1 Accesibles en cualquier momento */
/* 2.1.1 Lectura de un concepto paramétrico */
HANDLE EXPORTA BdcLee (LPCSTR cod);
/* 2.1.2 Lectura de un concepto paramétrico a partir del código del derivado *
HANDLE EXPORTA BdcDecodifica (LPCSTR cod, LPLONG opcl);
/* 2.1.3 Mensajes / códigos de error */
BOOL EXPORTA BdcError (HANDLE h, LPCSTR *err);
/* 2.2 Accesibles después de BdcLee */
/* 2.2.1 Obtención de sus parámetros */
LONG EXPORTA BdcParNumero (HANDLE h);
LONG EXPORTA BdcOpcNumero (HANDLE h, LONG par);
LPCSTR EXPORTA BdcParRotulo (HANDLE h, LONG par);
LPCSTR EXPORTA BdcOpcRotulo (HANDLE h, LONG par, LONG opc);

Especificación FIEBDC-3/98 / 633


/* 2.2.2 Obtención de un comentario */
LPCSTR EXPORTA BdcComentario (HANDLE h);
/* 2.2.3 Asignación de opciones de los parámetros y cálculo/chequeo del derivado */
BOOL EXPORTA BdcValida (HANDLE h, LPLONG opcl);
BOOL EXPORTA BdcCalcula (HANDLE h, LPLONG opcl);
/* 2.2.4 Liberación de memoria */
BOOL EXPORTA BdcCierra (HANDLE h);
/* 2.3 Accesibles después de BdcCalcula */
/* 2.3.1 Obtención del derivado paramétrico */
LONG EXPORTA BdcDesNumero (HANDLE h);
LPCSTR EXPORTA BdcDesCodigo (HANDLE h, LONG des);
BOOL EXPORTA BdcRendimiento (HANDLE h, LONG des, double FAR *ren);
BOOL EXPORTA BdcPrecio (HANDLE h, double FAR *pre);
LPCSTR EXPORTA BdcCodigo (HANDLE h);
LPCSTR EXPORTA BdcResumen (HANDLE h);
LPCSTR EXPORTA BdcTexto (HANDLE h);
LPCSTR EXPORTA BdcPliego (HANDLE h);
LPCSTR EXPORTA BdcClaves (HANDLE h);
#ifdef __cplusplus
}
#endif
#else /* BASE no definido */
/****************************************************************************/
/* PARTE DEL ARCHIVO NECESARIA PARA LOS DESARROLLADORES DE PROGRAMAS */
/****************************************************************************/
/****************************************************************************/
/* MACROS DEPENDIENTES DEL COMPILADOR */
#if defined (__BORLANDC__) /* Borland C++ */
#define IMPORTA FAR _import
#elif defined (_MSC_VER) /* Microsoft C */
#define IMPORTA
#else /* Otros */
#define IMPORTA
#endif
/* FUNCIONES GENERALES *****************************************************/
typedef LONG (IMPORTA * BDCCODIFICACION) (VOID);
/* FUNCIONES REFERENTES AL PARAMÉTRICO GLOBAL *****************************/

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 634


typedef LONG (IMPORTA * BDCGLOPARNUMERO) (VOID);
typedef LONG (IMPORTA * BDCGLOOPCNUMERO) (LONG par);
typedef LPCSTR (IMPORTA * BDCGLOPARROTULO) (LONG par);
typedef LPCSTR (IMPORTA * BDCGLOOPCROTULO) (LONG par, LONG opc);
typedef BOOL (IMPORTA * BDCGLOERROR) (LPCSTR *err);
typedef BOOL (IMPORTA * BDCGLOCALCULA) LPLONG opcl);
/* FUNCIONES REFERENTES AL RESTO DE PARAMÉTRICOS *************************/
typedef HANDLE (IMPORTA * BDCLEE) (LPCSTR cod);
typedef HANDLE (IMPORTA * BDCDECODIFICA) (LPCSTR cod, LPLONG opcl);
typedef BOOL (IMPORTA * BDCERROR) (HANDLE h, LPCSTR *err);
typedef LONG (IMPORTA * BDCPARNUMERO) (HANDLE h);
typedef LONG (IMPORTA * BDCOPCNUMERO) (HANDLE h, LONG par);
typedef LPCSTR (IMPORTA * BDCPARROTULO) (HANDLE h, LONG par);
typedef LPCSTR (IMPORTA * BDCOPCROTULO) (HANDLE h, LONG par, LONG opc);
typedef LPCSTR (IMPORTA * BDCCOMENTARIO) (HANDLE h);
typedef BOOL (IMPORTA * BDCVALIDA) (HANDLE h, LPLONG opcl);
typedef BOOL (IMPORTA * BDCCALCULA) (HANDLE h, LPLONG opcl);
typedef BOOL (IMPORTA * BDCCIERRA) (HANDLE h);
typedef LONG (IMPORTA * BDCDESNUMERO) (HANDLE h);
typedef LPCSTR (IMPORTA * BDCDESCODIGO) (HANDLE h, LONG des);
typedef BOOL (IMPORTA * BDCRENDIMIENTO) (HANDLE h, LONG des, double FAR *ren);
typedef BOOL (IMPORTA * BDCPRECIO) (HANDLE h, double FAR *pre);
typedef LPCSTR (IMPORTA * BDCCODIGO) (HANDLE h);
typedef LPCSTR (IMPORTA * BDCRESUMEN) (HANDLE h);
typedef LPCSTR (IMPORTA * BDCTEXTO) (HANDLE h);
typedef LPCSTR (IMPORTA * BDCPLIEGO) (HANDLE h);
typedef LPCSTR (IMPORTA * BDCCLAVES) (HANDLE h);
#endif /* de #ifdef BASE */
/****************************************************************************/
/* PARTE COMÚN DEL ARCHIVO: CÓDIGOS DE LOS MENSAJES DE ERROR */
/* SE ALMACENAN COMO BITS DE UN LONG, DE MANERA QUE EXISTAN HASTA 32 */
/****************************************************************************/
#define BDCERR_CORRECTO 0x0000 /* No hay error */
#define BDCERR_BASE_DATOS 0x0001 /* Existe un mensaje de error definido por e
#define BDCERR_PARAMETRO 0x0002 /* Se pasó a BdcCalcula o BdcGloCalcula un p
#define BDCERR_OPCION 0x0004 /* Se pasó a BdcCalcula o BdcGloCalcula una
#define BDCERR_MAX_OPCIONES 0x0008 /* Se definieron más de 62 opciones */

Especificación FIEBDC-3/98 / 635


#define BDCERR_NO_LEIDO 0x0010 /* Se intentó calcular un concepto sin leer */
#define BDCERR_NO_CALCULADO 0x0020 /* Se intentó acceder a datos de un derivado no c
#define BDCERR_DESCOMPOSICION 0x0040 /* Se intentó acceder a un ele. de la descomposic
#define BDCERR_SIN_CODIGO 0x0080 /* No existe código definido */
#define BDCERR_SIN_MEMORIA 0x0100 /* Memoria insuficiente */
#define BDCERR_CONCEPTO_NULO 0x0200 /* Se pasó un HANDLE nulo */
#endif /* FIEBDC_H */

Addenda a la especificación FIEBDC-3/98


Modificación de la función BdcPliego

Se amplia en un parámetro la función BdcPliego para permitir utilizar a través del


API distintos formatos de texto (ASCII, RTF...).

La especificación de la función modificada es como sigue:

LPCSTR EXPORTA BdcPliego (

HANDLE h, // identificador del concepto

LONG formato // identificador del formato

);

Propósito

Obtiene el texto del pliego del derivado paramétrico.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

formato: Identificador del formato de texto (ASCII, RTF...).

Valor devuelto

Devuelve el texto del pliego del derivado paramétrico en el formato solicitado, como
puntero constante 'far' a una cadena de caracteres. La propia función es responsable
de asignar memoria al puntero. Si no existe definido un texto de pliego, la función
devuelve la cadena vacía " ". En caso de error (por ejemplo, de formato no soportado
por la BDC), la función devuelve NULL. Para obtener más información sobre el error
producido, llame a la función BdcError ().

Se definen, por el momento, los siguientes formatos:

#define BDCFMT_ASCII 0

#define BDCFMT_RTF 1

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 636


Se define el siguiente (nuevo) código de error:

#define BDCERR_FMT_NO_SOPORTADO 0x0400

/* El formato de texto solicitado no está soportado por la BDC */

Nueva función BdcUnidad

Función que permite que un concepto paramétrico pueda generar elementos


derivados con distintas unidades de medición.

Para que dicha función actúe, el registro ~C debe contener el caracter especial *
dentro del campo unidad de medida. Dicho caracter indica que la unidad de medida
de los conceptos derivados los debe proporcionar el API.

Si se utiliza dicha función y es interesante para el redactor de la BD que la unidad de


medida sea un valor a escoger por parte del usuario, deberá añadirse la unidad de
medida como una propiedad más del concepto paramétrico.

La especificación de la función, accesibles después de BdcCalcula, es como sigue:

LPCSTR EXPORTA BdcUnidad (

HANDLE h // Identificador del concepto

);

Propósito

Obtiene la unidad de medida del concepto.

Parámetros

h: Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto correspondiente a la unidad de medida del derivado paramétrico,


como puntero constante 'far' a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función devuelve
NULL. Para obtener más información sobre el error producido, llame a la función
BdcError()

Especificación de las funciones del API

Funciones generales
LONG EXPORTA BdcCodificacion ( VOID );

Propósito

Indica si la base de datos utiliza un modelo de codificación dependiente o

Especificación FIEBDC-3/98 / 637


independiente del número y valor de los parámetros.

Valor devuelto

Devolverá ‘0’ si la codificación sigue un modelo dependiente (al ‘estilo’ FIEBDC-3/95),


y ‘1’ si sigue un modelo independiente.

Funciones referentes al paramétrico global


Accesibles en cualquier momento

Obtención de sus parámetros

LONG EXPORTA BdcGloParNumero ( VOID );

Propósito

Obtener el número de parámetros de concepto paramétrico global.

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve -1. Para


obtener más información sobre el error producido, llame a la función BdcGloError().

LONG EXPORTA BdcGloOpcNumero ( LONG par // número de parámetro del


concepto );

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Parámetros

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de producirse un error,


devuelve -1. Para obtener más información sobre el error producido, llame a la
función BdcGloError().

LPCSTR EXPORTA BdcGloParRotulo ( LONG par // número de parámetro del


concepto );

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como puntero

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 638


constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más información sobre el error producido, llame a la función BdcGloError().

LPCSTR EXPORTA BdcGloOpcRotulo ( LONG par, // número de parámetro del


concepto LONG opc // número de la opción del parámetro );

Propósito

Obtiene el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del concepto.

Parámetros

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto paramétrico global.

opc:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
opciones que posee el parámetro ‘par’ del concepto paramétrico global.

Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del concepto, como
puntero constante ‘far’ a una cadena de caracteres. La propia función es responsable
de asignar memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más información sobre el error producido, llame a la función BdcGloError().

Mensajes / Códigos de error

BOOL EXPORTA BdcGloError ( LPCSTR *err // mensaje de error devuelto );

Propósito

Obtiene el tipo de error producido. Una vez leído, se inicializa el código de error.

Parámetros

err:Puntero a un puntero constante ‘far’ a una cadena de caracteres. En él se


almacena el mensaje de error referente al error producido. La función es responsable
de asignar memoria al puntero. Si no existe un mensaje definido para el error
existente, ‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el código de error producido. Vea al final el apartado ‘Códigos de los


mensajes de error’ para más información.

Asignación de opciones a los parámetros

BOOL EXPORTA BdcGloCalcula ( LPLONG opcl, // lista de opciones de los


parámetros );

Propósito

Asigna los valores de los parámetros del concepto paramétrico global..

Especificación FIEBDC-3/98 / 639


Parámetros

opcl:Puntero a un array de LONGs con las opciones que se desea fijar a cada
parámetro. Las opciones se numeran empezando por cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, devuelve ‘-1’. Para obtener
más información sobre el error producido, llame a la función BdcGloError().

Funciones referentes al resto de paramétricos


Accesibles en cualquier momento

Lectura de un concepto paramétrico

HANDLE EXPORTA BdcLee ( LPCSTR cod // código del concepto );

Propósito

Lee el concepto paramétrico identificado por ‘cod’.

Parámetros

cod:Puntero constante ‘far’ a una cadena de caracteres con el código del concepto
paramétrico a leer. Si se utiliza un modelo de codificación dependiente, se asume
que dicho código tenga 7 caracteres y que el séptimo sea ‘$’. Dentro del código, los
caracteres pueden ser cualesquiera salvo el 0x00 (que indica el final del código).

Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de cero. En caso


de error, o si no existe el paramétrico, la función devuelve cero.

Lectura de un concepto paramétrico a partir del código completo del derivado

HANDLE EXPORTA BdcDecodifica ( LPCSTR cod, // código completo del derivado


paramétrico LPLONG opcl // puntero al espacio de memoria a ); // rellenar con
las opciones

Propósito

Lee el concepto paramétrico al que pertenece el concepto de código ‘cod’. El HANDLE y


las opciones ‘opcl’ devueltas se pueden utilizar directamente en una llamada a
BdcCalcula().

Parámetros

cod:Puntero constante ‘far’ a una cadena de caracteres con el código del concepto del
que se desea obtener el concepto paramétrico a la que pertenece. Dentro del código,
los caracteres pueden ser cualesquiera salvo el 0x00 (que indica el final del código).

opcl:Puntero a un array de LONGs en el que la función devolverá las opciones a las


que corresponda el derivado paramétrico. El array debe estar previamente
dimensionado con al menos el número de parámetros del concepto. Las opciones se
numeran empezando por cero.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 640


Valor devuelto

Si la función encuentra el paramétrico, retorna un HANDLE distinto de cero. En caso


de error, o si no existe ninguna concepto paramétrico del que el concepto ‘cod’ es
derivado, la función devuelve cero.

Mensajes / códigos de error

BOOL EXPORTA BdcError ( HANDLE h, // identificador del concepto LPCSTR


*err // mensaje de error devuelto );

Propósito

Obtiene tipo de error producido.

Parámetros

h:Identificador (HANDLE) del concepto, que debe ser obtenido en una llamada anterior
a la función BdcLee().

err:Puntero a un puntero constante ‘far’ a una cadena de caracteres. En él se


almacena el mensaje de error referente al error producido. La función es responsable
de asignar memoria al puntero. Si no existe un mensaje definido para el error
existente, ‘*err’ apuntará a la cadena vacía “”.

Valor devuelto

Devuelve el código de error producido. Vea al final el apartado ‘Códigos de los


mensajes de error’ para más información.

Accesibles después de BdcLee

Obtención de sus parámetros

LONG EXPORTA BdcParNumero ( HANDLE h // identificador del concepto );

Propósito

Obtiene el número de parámetros de concepto paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de parámetros. En caso de error, la función devuelve -1. Para


obtener más información sobre el error producido, llame a la función BdcError().

LONG EXPORTA BdcOpcNumero ( HANDLE h, // identificador del concepto LONG


par // número de parámetro del concepto );

Propósito

Obtiene el número de opciones de que consta el parámetro ‘par’.

Especificación FIEBDC-3/98 / 641


Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto.

Valor devuelto

Devuelve el número de opciones del parámetro ‘par’. En caso de producirse un error,


la función devuelve -1. Para obtener más información sobre el error producido, llame
a la función BdcError().

LPCSTR EXPORTA BdcParRotulo ( HANDLE h, // identificador del concepto LONG


par // número de parámetro del concepto );

Propósito

Obtiene el rótulo que identifica el parámetro ‘par’ del concepto.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto.

Valor devuelto

Devuelve el rótulo que identifica el parámetro ‘par’ del concepto, como puntero
constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más información sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcOpcRotulo ( HANDLE h, // identificador del concepto LONG


par, // número de parámetro del concepto LONG opc // número de la opción del
parámetro );

Propósito

Obtiene rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del concepto.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

par:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
parámetros del concepto.

opc:Número del parámetro. Debe ser un valor entre ‘0’ y ‘n-1’, siendo ‘n’ el número de
opciones que posee el parámetro ‘par’ del concepto.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 642


Valor devuelto

Devuelve el rótulo que identifica la opción ‘opc’ del parámetro ‘par’ del concepto, como
puntero constante ‘far’ a una cadena de caracteres. La propia función es responsable
de asignar memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más información sobre el error producido, llame a la función BdcError().

Obtención de un comentario

LPCSTR EXPORTA BdcComentario ( HANDLE h, // identificador del concepto );

Propósito

Obtiene un texto de comentario del concepto paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el comentario del concepto, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al puntero. En caso
de error, la función devuelve NULL. Para obtener más información sobre el error
producido, llame a la función BdcError().

Asignación de opciones de los parámetros y validación o cálculo del derivado

BOOL EXPORTA BdcValida ( HANDLE h, // identificador del concepto LPLONG opcl,


// lista de opciones de los parámetros );

Propósito

Averigua si una determinada combinación paramétrica es correcta o no.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

opcl:Puntero a un array de LONGs con las opciones que se desea fijar a cada
parámetro. Las opciones se numeran empezando por cero.

Valor devuelto

Devuelve ‘0’ si la combinación es correcta. En caso contrario, devuelve ‘-1’. Para


obtener más información sobre el error producido, llame a la función BdcError().

BOOL EXPORTA BdcCalcula ( HANDLE h, // identificador del concepto LPLONG


opcl, // lista de opciones de los parámetros );

Propósito

Calcula los datos correspondientes a un derivado paramétrico.

Especificación FIEBDC-3/98 / 643


Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

opcl:Puntero a un array de LONGs con las opciones que se desea fijar a cada
parámetro. Las opciones se numeran empezando por cero.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, o de que la combinación


no sea correcta, devuelve ‘-1’. Para obtener más información sobre el error producido,
llame a la función BdcError().

Liberación de memoria

BOOL EXPORTA BdcCierra ( HANDLE h // identificador del concepto );

Propósito

Cierra el concepto paramétrico y libera la memoria asignada.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve ‘0’ si realiza la operación correctamente. En caso de error, la función


devuelve ‘-1’. Para obtener más información sobre el error producido, llame a la
función BdcError().

Accesibles después de BdcCalcula

Obtención del derivado paramétrico

LONG EXPORTA BdcDesNumero ( HANDLE h // identificador del concepto );

Propósito

Obtiene el número de conceptos en los que se descompone el derivado paramétrico.


Es posible que un mismo concepto paramétrico posea derivados simples y
compuestos.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el número de elementos de su descomposición. En caso de error, la función


devuelve ‘-1’. Un valor de cero indicará que el concepto no tiene descomposición. Para
obtener más información sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcDesCodigo ( HANDLE h, // identificador del concepto LONG

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 644


des // número del elemento de la descomposición );

Propósito

Obtiene el código del elemento número ‘des’ en el que se descompone el derivado


paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

des:Número del elemento de la descomposición del concepto. Los elementos se


numeran empezando por cero.

Valor devuelto

Devuelve el código del elemento número ‘des’ en el que se descompone el derivado


paramétrico, como puntero constante ‘far’ a una cadena de caracteres. La propia
función es responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más información sobre el error producido, llame a la
función BdcError().

BOOL EXPORTA BdcRendimiento ( HANDLE h, // identificador del concepto LONG


des, // número del elemento de la descomposición double FAR *ren //
rendimiento a obtener );

Propósito

Obtiene el rendimiento del elemento número ‘des’ en el que se descompone el


derivado paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

des:Número del elemento de la descomposición del concepto. Los elementos se


numeran empezando por cero.

*ren:Puntero en el que devolver el rendimiento deseado. El rendimiento puede ser


positivo, cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el rendimiento se asigna


a cero y la función devuelve ‘-1’. Para obtener más información sobre el error
producido, llame a la función BdcError().

BOOL EXPORTA BdcPrecio ( HANDLE h, // identificador del concepto double FAR


*pre // precio unitario a devolver );

Propósito

Obtiene el precio unitario en el caso de que el derivado paramétrico sea un simple.


Es posible que un mismo concepto paramétrico tenga como derivados tanto simples

Especificación FIEBDC-3/98 / 645


como compuestos.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

*pre:Puntero en el que devolver el precio unitario. Dicho precio puede ser positivo,
cero o negativo.

Valor devuelto

Devuelve ‘0’ si se ejecuta correctamente. En caso de error, el precio se asigna a cero


y la función devuelve ‘-1’. Para obtener más información sobre el error producido,
llame a la función BdcError().

LPCSTR EXPORTA BdcCodigo ( HANDLE h // identificador del concepto );

Propósito

Obtiene el código del concepto.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el código del concepto, como puntero constante ‘far’ a una cadena de
caracteres. Si se ha calculado un derivado paramétrico (se ha llamado a BdcCalcula),
este código será el del derivado paramétrico. En caso contrario, será el código del
concepto paramétrico. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más información
sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcResumen ( HANDLE h // identificador del concepto );

Propósito

Obtiene el texto resumido del derivado paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto resumido del derivado paramétrico, como puntero constante ‘far’ a
una cadena de caracteres. La propia función es responsable de asignar memoria al
puntero. Si no existe definido un texto resumido, la función devuelve la cadena vacía
“”. En caso de error, la función devuelve NULL. Para obtener más información sobre el
error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcTexto ( HANDLE h // identificador del concepto );

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 646


Propósito

Obtiene el texto completo de descripción del derivado paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto completo de descripción del derivado paramétrico, como puntero


constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. Si no existe definido un texto completo de descripción,
la función devuelve la cadena vacía “”. En caso de error, la función devuelve NULL.
Para obtener más información sobre el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcPliego ( HANDLE h // identificador del concepto );

Propósito

Obtiene el texto del pliego del derivado paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve el texto del pliego del derivado paramétrico, como puntero constante ‘far’ a
una cadena de caracteres. La propia función es responsable de asignar memoria al
puntero. Si no existe definido un texto de pliego, la función devuelve la cadena vacía
“”.. En caso de error, la función devuelve NULL. Para obtener más información sobre
el error producido, llame a la función BdcError().

LPCSTR EXPORTA BdcClaves ( HANDLE h // identificador del concepto );

Propósito

Obtiene las claves de tesauro del derivado paramétrico.

Parámetros

h:Identificador (HANDLE) del concepto paramétrico, que debe ser obtenido en una
llamada anterior a la función BdcLee().

Valor devuelto

Devuelve las claves de tesauro del derivado paramétrico, como puntero constante ‘far’
a una cadena de caracteres, con el mismo formato que el registro ‘~A’, es decir,
‘{CLAVE_TESAURO\}’. La propia función es responsable de asignar memoria al
puntero. Si no existen definidas claves del tesauro, la función devuelve la cadena
vacía “”. En caso de error, la función devuelve NULL. Para obtener más información
sobre el error producido, llame a la función BdcError().

Especificación FIEBDC-3/98 / 647


M ENSAJES DE ERROR

Los códigos de error se almacenan en un LONG (entero de 32 bits) de manera que cada
error corresponde a un bit. De esta forma, es posible definir hasta 32 códigos de error
que pueden producirse de forma aislada o conjunta. Las llamadas a las funciones
BdcGloError() y BdcError() eliminan los códigos de error producidos anteriormente. Por
ejemplo, para saber si un determinado error se ha producido con el concepto ‘Concepto’,
se debe utilizar la sintaxis

const char *Mensaje; BOOL cod_err = BdcError ((HANDLE)Concepto, &Mensaje); if


(cod_err & BDCERR_BASE_DATOS) { // Se ha producido el error
‘BDCERR_BASE_DATOS’ ... }

Códigos de los mensajes de error

BDCERR_CORRECTO No hay error.

BDCERR_BASE_DATOS Existe un mensaje de error. Es el caso en el que la


definición paramétrica se indica una combinación
inválida y se devuelve un mensaje de error explicativo.

BDCERR_PARAMETRO Se pasó a BdcCalcula o BdcGloCalcula un parámetro


inexistente.

BDCERR_OPCION Se pasó a BdcCalcula o BdcGloCalcula una opción


inexistente.

BDCERR_MAX_OPCIONES Se definieron más de 62 opciones en un determinado


parámetro.

BDCERR_NO_LEIDO Se intentó utilizar BdcCalcula() antes que BdcLee().

BDCERR_NO_CALCULADO Se intentó acceder a datos de un derivado paramétrico


antes de utilizar BdcCalcula().

BDCERR_DESCOMPOSICION Se intentó acceder a un elemento de la


descomposición inexistente.

BDCERR_SIN_CODIGO No existe código definido.

BDCERR_SIN_MEMORIA Memoria insuficiente.

BDCERR_CONCEPTO_NULO Se pasó un HANDLE nulo.

Ejemplos de la compilación de paramétricos


Base de datos ejemplo: base.dll

Archivos para distribución de la base de datos:

Para distribuir la base datos que se construyera con este ejemplo, se deberían
proporcionar los siguientes archivos:

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 648


base.dll DLL que contiene tanto las descripciones paramétricas y como el interfaz
estándar con aplicaciones (API).

base.bc3 Archivo ASCII de la base de datos en formato FIEBDC-3/98. En el ejemplo, la


base incluye en esta DLL el paramétrico global de la base, así como las descripciones
paramétricas de los conceptos “ABPH.1$”, “SBRG.1$” y “EADR.3$”, por lo que al menos
debe contar con los registros

~P| | | BASE.DLL |

~P| ABPH.1$ | |

~P| SBRG.1$ | |

~P| EADR.3$ | |

Archivos necesarios para la construcción de la base de datos:

Este ejemplo está preparado para compilarse con Microsoft Visual C++ versión 2.2 o
posterior como DLL de 32 bits. Sin apenas modificaciones, sería posible compilarlo como
DLL de 16 bits o utilizar el compilador Borland C++.

Para construir la DLL, son necesarios los siguientes archivos:

fiebdc.h Archivo que define el formato, con el contenido ya especificado.

base.h Definición de variables y defines útiles para la definición de las descripciones


paramétricas.

interfaz.cpp Implementación de las funciones del API.

aplicat.cpp Implementación de las funciones de la descripción paramétrica.

base.cpp Implementación de las descripciones paramétricas de la base de datos en


formato C++. Es la única parte que escribirían los redactores de las bases de datos. En el
ejemplo se incluyen dos descompuestos y un elemental. En el elemental se ha utilizado
la posibilidad que posee el formato de que el código del derivado paramétrico no refleje
directamente el valor de sus parámetros. Se ha utilizado una sintaxis similar a la
descripción paramétrica del formato FIEBDC-3/95, para facilitar así el intercambio
entre ambos formatos.

base.def Definición de las funciones de exportación del API.

Archivo ‘base.h’

#define BASE
#include "Fiebdc.h"
#define PAR par.parametro
#define PRE par.precio
#define DES par.descompuesto
#define RES par.resumen
#define TEX par.texto

Especificación FIEBDC-3/98 / 649


#define PLI par.pliego
#define ROT par.lee_rotulo
#define ERR par.error
#define COD par.codigo
#define SIN par.sinonimo
#define CLA par.claves
#define COM par.comentario
#define INI(Op) par.inicializa(Op)
#define ROTA ROT(0)
#define ROTB ROT(1)
#define ROTC ROT(2)
#define ROTD ROT(3)
// Parámetros de cada concepto
#define A par.lee_opcion(0)
#define B par.lee_opcion(1)
#define C par.lee_opcion(2)
#define D par.lee_opcion(3)
// Parámetros del paremétrico Global
#define O Cglobal->lee_opcion(0)
#define P Cglobal->lee_opcion(1)
#define Q Cglobal->lee_opcion(2)
#define R Cglobal->lee_opcion(3)
// Valores de status
#define ST_VACIO 0
#define ST_FAMILIA 1
#define ST_DERIVADO 2
// Valores de operación
#define BORRA 0
#define LEE 1
#define CALCULA 2
#define BUSCA 3
#define VALIDA 4
// Valores BOOL de devolución
#define CORRECTO 0
#define ERRONEO -1
#define MAX_PARAM 12 // Máximo número de parámetros
#define MAX_TXT 30000 // Longitud máxima de los textos

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 650


class Cfiebdc;
typedef short (*PRECIO)(Cfiebdc &, short operacion);
extern Cfiebdc *Cglobal; // Paramétrico Global
extern PRECIO precios[]; // Lista de precios (concept
extern short Global (Cfiebdc &, short operacion); // Función del paramétrico G
class Cfiebdc {
private:
long parnum; // Nº de parámetros
long opcnum[MAX_PARAM]; // Nº de opciones por parámetro
char *parrot[MAX_PARAM]; // Texto de los rótulos de cada parámetro
char **opcrot[MAX_PARAM]; // Texto de las opciones de cada parámetro
long opc[MAX_PARAM]; // Valores de cada parámetro
char *err; // Texto de error
double pre; // Precio unitario (precio simple)
long desnum; // Nº de descompuestos
char **descod; // Códigos de cada concepto de la descomposició
double *desren; // Rendimiento de cada concepto de la descompos
char *res, *tex, *pli; // Texto resumido, Completo y Pliego
char *cla, *com; // Claves y comentario
char *codfam; // Código del concepto paramétrico (familia)
char *subcod; // Parte variable del código automática
char *codder; // Código completo del derivado
BOOL status; // Estado: ST_VACIO, ST_FAMILIA, ST_DERIVADO
long coderr; // Código de error
long sinnum; // Nº de sinónimos
char **codsin[2]; // Textos [0] subcódigos automáticos [1] sinóni
public:
PRECIO funcion; // Puntero a la función
BOOL parametro (char *Rot, ...); // Crea un parámetro
BOOL precio (double Pre); // Fija el precio unita
BOOL descompuesto (double Ren, char *cod, ...); // Crea un elemento de
BOOL resumen (char *Res, ...); // Fija el texto resumi
BOOL texto (char *Tex, ...); // Fija el texto de des
BOOL pliego (char *Pli, ...); // Fija el texto del pl
BOOL comentario (char *Com, ...); // Fija el texto del co
BOOL claves (char *Cla, ...); // Fija el texto de las
BOOL error (char *Err, ...); // Fija el texto de err
BOOL codigo (char *Cod, ...); // Fija el código (fami
void estado (BOOL Status) {status = Status; };
void cod_error (BOOL CodErr) {coderr |= CodErr; };
BOOL subcodigo (void); // Calcula el subcódigo
BOOL opciones (long *Opc); // Fija los valores de
BOOL opciones_glo (long ParGNum, long *OpcG); // Fija los valores de
BOOL sinonimo (char *Subcod, char *Codsin); // Fija el sinónimo se
long lee_num_par (void) { return parnum; };
long lee_num_des (void) { return desnum; };
long lee_num_opc (long id_par) { return opcnum[id_par];};
char *lee_rot_par (long id_par);
char *lee_rot_opc (long id_par, long id_opc);
char *lee_cod_des (long id_des);
double lee_ren_des (long id_des);
double lee_precio (void) { return pre; };
char *lee_codigo (void);
char *lee_resumen (void);

Especificación FIEBDC-3/98 / 651


char *lee_texto (void);
char *lee_pliego (void);
char *lee_claves (void);
char *lee_comentario (void);
char *lee_error (void);
long lee_opcion (long Par); // Devuelve la opción fijada en el parámetro
char *lee_rotulo (long Par); // Devuelve el rótulo de la opción fijada en
BOOL lee_opciones (char *Cod, long *Opc); // Devuelve las opciones de un
BOOL lee_estado (void) { return status; };
BOOL lee_cod_error (void) { return coderr; };
int inicializa (short operacion);
Cfiebdc ();
~Cfiebdc ();
};
Archivo ‘inferfaz.cpp’

#define STRICT
#include <windows.h>
#include <string.h>
#include "Base.h"
Cfiebdc *Cglobal;
/////////////////////////////////////////////////////////////////////////////
// FUNCIONES GENERALES Y DE INICIALIZACIÓN
BOOL APIENTRY
DllMain ( // Específico de Microsoft. Borland utiliza ‘DllEntryPoint’
HANDLE hModule,
DWORD tipo_llamada,
LPVOID lpReserved )
{
switch (tipo_llamada) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
// Inicialización
Cglobal = new Cfiebdc;
Global (*Cglobal, LEE);
Cglobal->funcion = &Global;
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
// Liberación
Cglobal->inicializa (BORRA);
Cglobal->Cfiebdc::~Cfiebdc();
}
return TRUE;
}
LONG EXPORTA
BdcCodificacion (VOID)
{
return 1; // La codificación es indipendiente de los valores de los parámetros
}
/////////////////////////////////////////////////////////////////////////////
// FUNCIONES REFERENTES AL PARAMÉTRICO GLOBAL
// Obtención de sus parámetros
LONG EXPORTA
BdcGloParNumero (VOID)
{
return BdcParNumero (Cglobal);
}

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 652


LONG EXPORTA
BdcGloOpcNumero (
LONG par )
{
return BdcOpcNumero (Cglobal, par);
}
LPCSTR EXPORTA
BdcGloParRotulo (
LONG par )
{
return BdcParRotulo (Cglobal, par);
}
LPCSTR EXPORTA
BdcGloOpcRotulo (
LONG par,
LONG opc )
{
return BdcOpcRotulo (Cglobal, par, opc);
}
BOOL EXPORTA
BdcGloCalcula (
LPLONG opcl)
{
return BdcCalcula (Cglobal, opcl);
}
BOOL EXPORTA
BdcGloError (
LPCSTR *err)
{
return BdcError (Cglobal, err);
}
////////////////////////////////////////////////////////////////////////////
// FUNCIONES REFERENTES AL RESTO DE PARAMÉTRICOS
// Lectura de un concepto paramétrico
HANDLE EXPORTA
BdcLee (
LPCSTR cod) {
int i;
Cfiebdc *Cpar = new Cfiebdc();
for (i=0;;i++) {
Cpar->inicializa(BORRA);
if (!((precios [i])(*Cpar, BUSCA)) )
break;
if (strcmp (Cpar->lee_codigo(), cod) == 0) {
(precios [i])(*Cpar, LEE);
Cpar->funcion = precios[i];
return (HANDLE)Cpar;
}
}
BdcCierra ( (HANDLE)Cpar );
return (HANDLE) 0; // El precio no existe
}
// Lectura de un concepto paramétrico a partir del código del derivado paramétric
HANDLE EXPORTA
BdcDecodifica (
LPCSTR cod,
LPLONG opcl )
{

Especificación FIEBDC-3/98 / 653


int i,j;
char cod_fam[8];
if (strlen(cod)<7) return (HANDLE)0;
strncpy (cod_fam, cod, 6);
cod_fam[6]='$';
cod_fam[7]='\0';
for (i=0; i<7; i++)
if (cod_fam[i]<=' ') cod_fam[i]='_';
Cfiebdc *Cpar = new Cfiebdc();
for (i=0;;i++) {
Cpar->inicializa(BORRA);
if (!((precios [i])(*Cpar, BUSCA)) )
break;
if (strcmp (Cpar->lee_codigo(), cod_fam) == 0) {
//Se encontró el paramétrico
(precios [i])(*Cpar, LEE);
Cpar->funcion = precios[i];
j=Cpar->lee_num_par();
if (!Cpar->lee_opciones((char *)cod+6, opcl)) {
break;
}
return (HANDLE)Cpar;
}
}
BdcCierra ( (HANDLE)Cpar );
return (HANDLE) 0; // El precio no existe
}
// Obtención de sus parámetros
LONG EXPORTA
BdcParNumero (
HANDLE h )
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
} else
return Cpar->lee_num_par();
}
LONG EXPORTA
BdcOpcNumero (
HANDLE h,
LONG par)
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
} else
return Cpar->lee_num_opc (par);
}
LPCSTR EXPORTA
BdcParRotulo (
HANDLE h,

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 654


LONG par)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
} else
return (LPCSTR)Cpar->lee_rot_par(par);
}
LPCSTR EXPORTA
BdcOpcRotulo (
HANDLE h,
LONG par,
LONG opc)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
} else
return (LPCSTR)Cpar->lee_rot_opc (par, opc);
}
// Asignación de opciones de los parámetros y comprobación de su validez
BOOL EXPORTA
BdcValida (
HANDLE h,
LPLONG opcl )
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
}
if (!Cpar->opciones (opcl)) return FALSE;
return ((Cpar->funcion) (*Cpar, VALIDA)) ? CORRECTO : ERRONEO;
}
// Asignación de opciones de los parámetros y cálculo del derivado
BOOL EXPORTA
BdcCalcula (
HANDLE h,
LPLONG opcl )
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
}
if (!Cpar->opciones (opcl)) return FALSE;
return ((Cpar->funcion) (*Cpar, CALCULA)) ? CORRECTO : ERRONEO;
}

Especificación FIEBDC-3/98 / 655


// Liberación de memoria
BOOL EXPORTA
BdcCierra (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
Cpar->inicializa (BORRA);
Cpar->Cfiebdc::~Cfiebdc();
return CORRECTO;
}
// Obtención del derivado paramétrico
LONG EXPORTA
BdcDesNumero (
HANDLE h )
{
Cfiebdc *Cpar;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return ERRONEO;
}
return Cpar->lee_num_des();
}
LPCSTR EXPORTA
BdcDesCodigo (
HANDLE h,
LONG des )
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return NULL;
}
return (LPCSTR)Cpar->lee_cod_des (des);
}
BOOL EXPORTA
BdcRendimiento (
HANDLE h,
LONG des,
double FAR *ren)
{
Cfiebdc *Cpar;
*ren = 0.0;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 656


if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return ERRONEO;
}
*ren = Cpar->lee_ren_des(des);
return CORRECTO;
}
BOOL EXPORTA
BdcPrecio (
HANDLE h,
double FAR *pre)
{
Cfiebdc *Cpar;
*pre=0.0;
if (!h) return ERRONEO;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return ERRONEO;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return ERRONEO;
}
*pre = Cpar->lee_precio();
return CORRECTO;
}
LPCSTR EXPORTA
BdcCodigo (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
return (LPCSTR)Cpar->lee_codigo();
}
LPCSTR EXPORTA
BdcResumen (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return NULL;

Especificación FIEBDC-3/98 / 657


}
return (LPCSTR)Cpar->lee_resumen();
}
LPCSTR EXPORTA
BdcTexto (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return NULL;
}
return (LPCSTR)Cpar->lee_texto();
}
LPCSTR EXPORTA
BdcPliego (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return NULL;
}
return (LPCSTR)Cpar->lee_pliego();
}
LPCSTR EXPORTA
BdcComentario (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
return (LPCSTR)Cpar->lee_comentario();
}
LPCSTR EXPORTA
BdcClaves (
HANDLE h)
{
Cfiebdc *Cpar;
if (!h) return NULL;
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 658


Cpar->cod_error (BDCERR_NO_LEIDO);
return NULL;
}
if (Cpar->lee_estado() != ST_DERIVADO) {
Cpar->cod_error (BDCERR_NO_CALCULADO);
return NULL;
}
return (LPCSTR)Cpar->lee_claves();
}
BOOL EXPORTA
BdcError (
HANDLE h,
LPCSTR *err)
{
Cfiebdc *Cpar;
BOOL ret;
if (!h) { *err=""; return BDCERR_CONCEPTO_NULO; }
else Cpar = (Cfiebdc *)h;
if (Cpar->lee_estado() == ST_VACIO) {
Cpar->cod_error (BDCERR_NO_LEIDO);
*err = "";
return Cpar->lee_cod_error();
}
*err = (LPCSTR)Cpar->lee_error();
ret = Cpar->lee_cod_error();
Cpar->cod_error (BDCERR_CORRECTO);
return ret;
}
Archivo ‘aplicat.cpp’

#define STRICT
#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <math.h>
#include "Base.h"
Cfiebdc::Cfiebdc (void) {
int i,j;
estado (ST_VACIO);
coderr =BDCERR_CORRECTO;
// parámetros y opciones por parámetro
for (i=0; i<MAX_PARAM; i++) {
parrot[i] = (char *)0;
opcrot[i] = (char **)0;
}
parnum=0;
pre=0.;
// sinónimos
for (j=0; j<2; j++) {
codsin[j]= (char **)0;
}
sinnum=0;
// descomposición
desren = (double *)0;
descod = (char **)0;
desnum=0;
// textos

Especificación FIEBDC-3/98 / 659


err = (char *)0;
res = (char *)0;
tex = (char *)0;
pli = (char *)0;
com = (char *)0;
cla = (char *)0;
codfam = (char *)0;
subcod = (char *)0;
codder = (char *)0;
}
Cfiebdc::~Cfiebdc (void) {
estado (ST_VACIO);
}
Cfiebdc::inicializa (
short operacion )
{
int i,j;
coderr = BDCERR_CORRECTO;
if (operacion == BORRA) {
estado (ST_VACIO);
// parámetros y opciones por parámetro
for (i=0; i<parnum; i++) {
if (parrot[i]) {
delete[] parrot[i];
parrot[i] = (char *)0;
}
for (j=0; j< opcnum[i]; j++) {
if (opcrot[i][j]) {
delete[] opcrot[i][j];
opcrot[i][j]= (char *)0;
}
}
if (opcrot[i]) {
delete[] opcrot[i];
opcrot[i]= (char **)0;
}
}
parnum=0;
pre=0.;
// sinónimos
for (j=0; j<2; j++) {
for (i=0; i<sinnum; i++) {
if (codsin[j][i]) {
delete[] codsin[j][i];
codsin[j][i]= (char *)0;
}
}
if (codsin[j]) {
delete[] codsin[j];
codsin[j]= (char **)0;
}
}
sinnum=0;
// descomposición
if (desren) {
delete[] desren;
desren = (double *)0;
}

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 660


for (i=0; i<desnum; i++) {
if (descod[i]) {
delete[] descod[i];
descod[i] = (char *)0;
}
}
if (descod) {
delete[] descod;
descod = (char **)0;
}
desnum=0;
// textos
if (err) { delete[] err; err = (char *)0; }
if (res) { delete[] res; res = (char *)0; }
if (tex) { delete[] tex; tex = (char *)0; }
if (pli) { delete[] pli; pli = (char *)0; }
if (cla) { delete[] cla; cla = (char *)0; }
if (com) { delete[] com; com = (char *)0; }
if (codfam) { delete[] codfam; codfam = (char *)0; }
if (subcod) { delete[] subcod; subcod = (char *)0; }
if (codder) { delete[] codder; codder = (char *)0; }
}
else if (operacion == LEE) {
estado (ST_FAMILIA);
}
else if (operacion==CALCULA) {
estado (ST_DERIVADO);
pre=0.;
// descomposición
if (desren) {
delete[] desren;
desren = (double *)0;
}
for (i=0; i<desnum; i++) {
if (descod[i]) {
delete[] descod[i];
descod[i] = (char *)0;
}
}
if (descod) {
delete[] descod;
descod = (char **)0;
}
desnum=0;
if (err) { delete[] err; err = (char *)0; }
if (res) { delete[] res; res = (char *)0; }
if (tex) { delete[] tex; tex = (char *)0; }
if (pli) { delete[] pli; pli = (char *)0; }
if (cla) { delete[] cla; cla = (char *)0; }
if (codfam) { delete[] codfam; codfam = (char *)0; }
if (subcod) { delete[] subcod; subcod = (char *)0; }
if (codder) { delete[] codder; codder = (char *)0; }
}
return TRUE;
}
BOOL
Cfiebdc::parametro (
char *rot, ... )

Especificación FIEBDC-3/98 / 661


{
int i, len;
long Opcnum=0;
char *s;
va_list marker;
if (parnum>=MAX_PARAM) return FALSE;
len = strlen(rot);
parrot[parnum] = new char[len+1];
strcpy (parrot[parnum], rot);
va_start( marker, rot );
do {
s = va_arg( marker, char *);
len = strlen (s);
if (len==0) break;
Opcnum++;
} while ( s[0] != '\0' );
va_start( marker, rot );
opcrot[parnum] = new char* [Opcnum];
for (i=0; i<Opcnum; i++) {
s = va_arg( marker, char *);
len = strlen (s);
opcrot[parnum][i] = new char[len+1];
strcpy (opcrot[parnum][i], s);
}
va_end( marker );
opcnum[parnum]=Opcnum;
parnum++;
return TRUE;
}
BOOL
Cfiebdc::precio (
double Pre )
{
pre=Pre;
return TRUE;
}
BOOL
Cfiebdc::descompuesto (
double Ren,
char *Cod,... )
{
int i, len;
char s[255], **Descod;
va_list marker;
double *Desren;
if (fabs(Ren)<0.0005) return FALSE;
Desren = new double [desnum+1];
memcpy (Desren, desren, desnum*sizeof(double));
delete[] desren;
desren = Desren;
desren [desnum] = Ren;
Descod = new char *[desnum+1];
for (i=0; i<desnum; i++)
Descod[i] = descod[i];
delete[] descod;
descod = Descod;
va_start( marker, Cod );
vsprintf (s,Cod,marker);

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 662


len = strlen (s);
descod[desnum] = new char[len+1];
strcpy (descod[desnum], s);
va_end( marker );
desnum++;
return TRUE;
}
BOOL
Cfiebdc::resumen (
char *Res, ... )
{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Res );
vsprintf (s,Res,marker);
len = strlen (s);
res = new char[len+1];
strcpy (res, s);
delete[] (s);
va_end( marker );
return TRUE;
}
BOOL
Cfiebdc::texto (
char *Tex, ...)
{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Tex );
vsprintf (s,Tex,marker);
len = strlen (s);
tex = new char[len+1];
strcpy (tex, s);
delete[] (s);
va_end( marker );
return TRUE;
}
BOOL
Cfiebdc::pliego (
char *Pli, ...)
{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Pli );
vsprintf (s,Pli,marker);
len = strlen (s);
pli = new char[len+1];
strcpy (pli, s);
delete[] (s);
va_end( marker );
return TRUE;
}
BOOL
Cfiebdc::claves (
char *Cla, ...)

Especificación FIEBDC-3/98 / 663


{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Cla );
vsprintf (s,Cla,marker);
len = strlen (s);
pli = new char[len+1];
strcpy (cla, s);
delete[] (s);
va_end( marker );
return TRUE;
}
BOOL
Cfiebdc::comentario (
char *Com, ...)
{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Com );
vsprintf (s,Com,marker);
len = strlen (s);
pli = new char[len+1];
strcpy (com, s);
delete[] (s);
va_end( marker );
return TRUE;
}
BOOL
Cfiebdc::error (
char *Err, ...)
{
char *s = new char [MAX_TXT];
int len;
va_list marker;
va_start( marker, Err );
vsprintf (s,Err,marker);
len = strlen (s);
err = new char[len+1];
strcpy (err, s);
delete[] (s);
va_end( marker );
cod_error (BDCERR_BASE_DATOS);
return FALSE;
}
long
Cfiebdc::lee_opcion (
long Par)
{
if (Par>=parnum) {
cod_error (BDCERR_PARAMETRO);
return -1;
}
return opc[Par];
}
char
*Cfiebdc::lee_rotulo (

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 664


long Par)
{
if (Par>=parnum || opc[Par]>=opcnum[Par]) {
cod_error (BDCERR_PARAMETRO);
return NULL;
}
return opcrot[Par][opc[Par]];
}
BOOL
Cfiebdc::codigo (
char *Cod, ...)
{
char *s = new char [MAX_TXT];
int i,len;
va_list marker;
va_start( marker, Cod );
vsprintf (s,Cod,marker);
len = strlen (s);
for (i=0; i<len; i++)
if (s[i] == '$') break;
if (codfam) delete[] codfam;
if (i<len) {
codfam = new char[len+1];
strcpy (codfam, s);
} else {
codfam = new char[len+2];
sprintf (codfam, "%s%c", s, '$');
}
delete[] s;
va_end( marker );
if (status==ST_DERIVADO)
return subcodigo();
return TRUE;
}
BOOL
Cfiebdc::opciones (
long *Opc )
{
int i;
BOOL ret=TRUE;
for (i=0; i<parnum; i++) {
if (Opc[i]<0 || Opc[i]>=opcnum[i]) {
cod_error (BDCERR_OPCION);
opc[i] = 0;
ret=FALSE;
} else {
opc[i] = Opc[i];
}
}
return ret;
}
BOOL
Cfiebdc::sinonimo (
char *Subcod,
char *Codsin )
{
char **Sin[2];
int i,j,len1,len2;

Especificación FIEBDC-3/98 / 665


len1 = strlen (Subcod);
len2 = strlen (Codsin);
if (!len1 || !len2) return FALSE;
for (i=0; i<2; i++) {
Sin[i] = new char *[sinnum+1];
for (j=0; j<sinnum; j++) {
Sin[i][j] = codsin[i][j];
}
if (codsin[i]) delete[] codsin[i];
}
Sin[0][sinnum] = new char [len1+1];
Sin[1][sinnum] = new char [len2+1];
strcpy (Sin[0][sinnum], Subcod);
strcpy (Sin[1][sinnum], Codsin);
codsin[0]=Sin[0];
codsin[1]=Sin[1];
sinnum++;
return TRUE;
}
char
*Cfiebdc::lee_rot_par (
long id_par)
{
if (id_par >= parnum || !parrot[id_par]) {
cod_error (BDCERR_PARAMETRO);
return "";
}
else
return parrot[id_par];
}
char
*Cfiebdc::lee_rot_opc
(long id_par,
long id_opc) {
if (id_par >= parnum) {
cod_error (BDCERR_PARAMETRO);
return NULL;
} else if (id_opc >= opcnum[id_par] || !opcrot[id_par] || !opcrot[id_par][id_opc])
cod_error (BDCERR_OPCION);
return NULL;
} else
return opcrot[id_par][id_opc];
}
char
*Cfiebdc::lee_cod_des (
long id_des )
{
if (id_des >= desnum || !descod[id_des]) {
cod_error (BDCERR_DESCOMPOSICION);
return NULL;
} else
return descod[id_des];
}
double
Cfiebdc::lee_ren_des (
long id_des )
{
if (id_des >= desnum) {

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 666


cod_error (BDCERR_DESCOMPOSICION);
return -1.0;
} else
return desren[id_des];
}
char
*Cfiebdc::lee_codigo (void) {
if (codder)
return codder;
else if (codfam)
return codfam;
else {
cod_error (BDCERR_SIN_CODIGO);
return NULL;
}
}
char
*Cfiebdc::lee_resumen (void) {
if (res) return res;
else return "";
}
char
*Cfiebdc::lee_texto (void) {
if (tex) return tex;
else return "";
}
char
*Cfiebdc::lee_pliego (void) {
if (pli) return pli;
else return "";
}
char
*Cfiebdc::lee_claves (void) {
if (pli) return cla;
else return "";
}
char
*Cfiebdc::lee_comentario (void) {
if (pli) return com;
else return "";
}
char
*Cfiebdc::lee_error (void) {
if (err) return err;
else return "";
}
BOOL
Cfiebdc::subcodigo (void) {
int i, az='z'-'a', AZ='Z'-'A';
BOOL ret=TRUE;
char *s = new char [MAX_TXT];
// Obtención del subcódigo automático
subcod = new char [parnum+1];
for (i=0; i<parnum; i++) {
if (opc[i]>=0 && opc[i]<=0+az)
subcod[i]=opc[i]+'a';
else if (opc[i]>0+az && opc[i]<=0+az+AZ)
subcod[i]=opc[i]-az+'A';

Especificación FIEBDC-3/98 / 667


else if (opc[i]>0+az+AZ && opc[i]<=9+az+AZ)
subcod[i]=opc[i]-az-AZ;
else {
subcod[i]='_';
cod_error (BDCERR_MAX_OPCIONES);
ret = FALSE;
}
}
subcod[i]='\0';
// Comprobar lista de sinónimos
for (i=0; i<sinnum; i++) {
if (strcmp(subcod,codsin[0][i]) == 0) {
delete [] subcod;
subcod = new char [strlen (codsin[1][i])+1];
strcpy (subcod, codsin[1][i]);
}
}
// Rellenar codfam y codder
strcpy (s, codfam);
for (i=0; i<(int)strlen(codfam); i++)
if (codfam[i]=='$') break;
strcpy (s+i, subcod);
codder = new char [strlen(s)+1];
strcpy (codder, s);
return ret;
}
BOOL
Cfiebdc::lee_opciones (
char *Cod, // parte variable del código
long *Opc ) // opciones a devolver
{
int i, len, az='z'-'a', AZ='Z'-'A';
char *s;
BOOL ret=TRUE;
for (i=0; i<sinnum; i++) {
if (strcmp(Cod, codsin[1][i])==0) {
len = strlen (codsin[0][i]);
s = codsin[0][i];
break;
}
}
if (i==sinnum) {
s = Cod;
len = strlen (s);
}
for (i=0; i<len; i++) {
if (s[i] >= 'a' && s[i] <= 'z')
Opc[i] = s[i]-'a';
else if (s[i] >= 'A' && s[i] <= 'Z')
Opc[i] = s[i]-'A' + az;
else if (s[i] >= '0' && s[i] <= '9')
Opc[i] = s[i]-'0' + az + AZ;
else {
// excedida capacidad
Opc[i] = az + AZ + 11;
cod_error (BDCERR_MAX_OPCIONES);
ret = FALSE;
}

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 668


}
return ret;
}
Archivo ‘base.cpp’

#define STRICT
#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
#include "Base.h"
//////////////////////////////////////////////////////////////////////////////
// Concepto Global
//
short Global (Cfiebdc &par, short operacion) {
INI (operacion);
switch (operacion) {
case LEE:
PAR ("ÁMBITO","España","Madrid","Barcelona","Valencia","Bilbao","Sevilla"
return TRUE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
// Conceptos
//
short fABPH_1 (Cfiebdc &par, short operacion) {
INI (operacion);
COD ("ABPH.1$");
switch (operacion) {
case LEE:
PAR ("RESISTENCIA", "H-50", "H-100", "H-125", "H-150", "H-175", "");
PAR ("CONSISTENCIA", "plástica", "blanda", "");
PAR ("Tmax", "18", "38", "78", "");
return TRUE;
case CALCULA:
case VALIDA:
// plástica H50 H100 H125 H150 H175
double T[2][3][5] ={ .180, .255, .290, .330, .365, //18
.160, .225, .260, .290, ..325, //3
.140, .200, .225, .255, ..285, //7
// blanda
.210, .290, .330, .375, ..000,
.185, .260, .300, .335, ..375,
.165, .235, .265, .300, ..335 };
if (!T[B][C][A]) return ERR ("Combinación no permitida");
if (operacion == VALIDA) return TRUE;
double U[2][3]= { .180, .160, .140,
.205, .185, .165 };
double V[2][3][5]= { .695, .675, .665, .650, .640,
.720, .700, .690, .680, ..670,
.740, .725, .720, .710, ..700,
.665, .640, .630, .615, ..0,
.690, .670, .665, .645, ..635,
.715, .695, .685, .775, ..665 };
DES (T[B][C][A], "SBAC.5ccaa"); // Cemento
DES (U[B][C], "SBAA.1a"); // Agua
DES (V[B][C][A], "SBRA.5ab"); // Arena

Especificación FIEBDC-3/98 / 669


DES (V[B][C][A]*2, "SBRG.1%c", 'a'+C); // Grava
DES (1, "MAMA19a"); // Hormigonera
DES (2, "MOOC13a"); // Peón ordinario
RES ("%s C/%s Tmax=%s mm", ROTA, ROTB, ROTC);
int G[5]= { 50, 100, 125, 150, 175 };
TEX ( "Hormigón %s, resistencia característica %d Kg/cm2, "
"consistencia %s, cemento tipo II-Z/35-A, arena silícea "
"(0/6) y grava silícea rodada, tamaño máximo %s mm, "
"confeccionado en obra con hormigonera de 300 l de capacidad. "
"Según RC-93 y EH-91.", ROTA, G[A], ROTB, ROTC );
return TRUE;
}
return TRUE;
}
short fSBRG_1 (Cfiebdc &par, short operacion) {
INI (operacion);
COD ("SBRG.1$");
switch (operacion) {
case LEE:
PAR ("Tmax", "18", "38", "78", "");
// Sinónimos
SIN ("a", "_18");
SIN ("b", "_38");
SIN ("c", "_78");
return TRUE;
case CALCULA:
// ÁMBITO (Primer parámetro global. Parámetro 'O'
// España Madrid Barcelona Valencia Bilbao Sevilla
double I [] = { 123.5, 135.1, 130.0, 129.8, 127.8, 125.9 };
PRE (I[O]+0.25*A);
RES ("Grava de Tmáx. %s", ROTA);
return TRUE;
}
return TRUE;
}
short fEADR_3 (Cfiebdc &par, short operacion) {
INI (operacion);
COD ("EADR.3$");
switch (operacion) {
case LEE:
PAR ("MATERIAL","yeso","cemento","cal","cal y cemento","");
PAR ("PARAMENTOS","verticales","horizontales","");
case CALCULA:
char *cF;
// $A yeso cemento cal cal y cemento $B
double
pdT[2][4]= {{ 0.350, 0.500, 0.400, 0.450}, // vertical
{ 0.550, 0.800, 0.600, 0.650}}; // horizontal
DES (pdT[B][A], "MOOA.1d"); // peón ordinario
DES (0.02, "%%"); // maux
if (A==0) cF = "guarnecido";
else cF = "enfoscado";
char *pcG[4]= {"yeso", "cto", "cal", "cal y cto"};
char *pcH[2]= {"vert", "hrz"};
RES ("Picado %s param %s",pcG[A],pcH[B]);
TEX ("Picado de %s de %s en paramentos %s, retirada de escombros y carga, "
"sin transporte a vertedero.", cF, ROTA, ROTB);
}

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 670


return TRUE;
}
short fFIN (Cfiebdc &par, short operacion) {
return FALSE;
}
//////////////////////////////////////////////////////////////////////////////
// Lista de Conceptos
//
PRECIO precios[] = {fABPH_1, fSBRG_1, fEADR_3, fFIN};
Archivo ‘dase.def’

LIBRARY BASE
DESCRIPTION 'Formato Fiebdc-3/98. Ejemplo de Definiciones paramétricas'
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD SINGLE
HEAPSIZE 1024
EXPORTS
BdcCodificacion
BdcGloParNumero
BdcGloOpcNumero
BdcGloParRotulo
BdcGloOpcRotulo
BdcGloCalcula
BdcGloError
BdcLee
BdcDecodifica
BdcParNumero
BdcOpcNumero
BdcParRotulo
BdcOpcRotulo
BdcComentario
BdcValida
BdcCalcula
BdcCierra
BdcDesNumero
BdcDesCodigo
BdcRendimiento
BdcPrecio
BdcCodigo
BdcResumen
BdcTexto
BdcPliego
BdcClaves
BdcError
Aplicación ejemplo: programa.exe

Esta sencilla aplicación, lee los conceptos que se incluyen en el propio fuente de la base
BASE.DLL (en una aplicación real, los conceptos se definen en los registros ~P de base.
bc3), y escribe en el archivo 'SALIDA.TXT' los rótulos de todos sus parámetros así como
todos los datos de todas sus combinaciones paramétricas.

Archivos necesarios para la construcción del programa ejemplo:

Este ejemplo está preparado para compilarse con Microsoft Visual C++ versión 2.2 o
posterior como aplicación Windows 95 de 32 bits en modo consola. Sin apenas
modificaciones, sería posible compilarlo como aplicación de 16 bits o utilizar el

Especificación FIEBDC-3/98 / 671


compilador Borland C++.

Para construir la aplicación, son necesarios los siguientes archivos:

fiebdc.hArchivo que define el formato.

programa.hDeclaración de variables y funciones.

program0.cFunciones auxiliares de apertura y cierre de la base de datos y tratamiento


de los mensajes de error.

programa.cPrograma ejemplo.

Archivo ‘programa.h’

#include "Fiebdc.h"
#define CORRECTO 0
#define ERRONEO -1
BDCGLOPARNUMERO pGloParNumero;
BDCGLOOPCNUMERO pGloOpcNumero;
BDCGLOPARROTULO pGloParRotulo;
BDCGLOOPCROTULO pGloOpcRotulo;
BDCGLOCALCULA pGloCalcula;
BDCGLOERROR pGloError;
BDCLEE pLee;
BDCDECODIFICA pDecodifica;
BDCPARNUMERO pParNumero;
BDCOPCNUMERO pOpcNumero;
BDCPARROTULO pParRotulo;
BDCOPCROTULO pOpcRotulo;
BDCVALIDA pValida;
BDCCALCULA pCalcula;
BDCCIERRA pCierra;
BDCDESNUMERO pDesNumero;
BDCDESCODIGO pDesCodigo;
BDCRENDIMIENTO pRendimiento;
BDCPRECIO pPrecio;
BDCCODIGO pCodigo;
BDCRESUMEN pResumen;
BDCTEXTO pTexto;
BDCPLIEGO pPliego;
BDCCOMENTARIO pComentario;
BDCCLAVES pClaves;
BDCERROR pError;
BOOL AbreDll (char *nDll, HINSTANCE *hDll, char **Err);
BOOL CierraDll (HMODULE hDll, char **Err);
BOOL ChequeaError (HANDLE Precio, FILE *f, BOOL EsGlobal);
Archivo ‘program0’

#define STRICT
#include <windows.h>
#include <stdio.h>
#include "programa.h"
BOOL
AbreDll (
char *nDll,
HINSTANCE *hDll,

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 672


char **Err )
{
*hDll = LoadLibrary (nDll);
if ( ! (*hDll) ) {
*Err = "IMPOSIBLE ABRIR LA LIBRERIA DE LA BASE";
return FALSE;
}
if( (pGloParNumero = (BDCGLOPARNUMERO) GetProcAddress (*hDll, "BdcGloPar
(pGloOpcNumero = (BDCGLOOPCNUMERO) GetProcAddress (*hDll, "BdcGloOpc
(pGloParRotulo = (BDCGLOPARROTULO) GetProcAddress (*hDll, "BdcGloPar
(pGloOpcRotulo = (BDCGLOOPCROTULO) GetProcAddress (*hDll, "BdcGloOpc
(pGloCalcula = (BDCGLOCALCULA) GetProcAddress (*hDll, "BdcGloCal
(pGloError = (BDCGLOERROR) GetProcAddress (*hDll, "BdcGloErr
(pLee = (BDCLEE) GetProcAddress (*hDll, "BdcLee"))
(pDecodifica = (BDCDECODIFICA) GetProcAddress (*hDll, "BdcDecodi
(pParNumero = (BDCPARNUMERO) GetProcAddress (*hDll, "BdcParNum
(pOpcNumero = (BDCOPCNUMERO) GetProcAddress (*hDll, "BdcOpcNum
(pParRotulo = (BDCPARROTULO) GetProcAddress (*hDll, "BdcParRot
(pOpcRotulo = (BDCOPCROTULO) GetProcAddress (*hDll, "BdcOpcRot
(pValida = (BDCVALIDA) GetProcAddress (*hDll, "BdcValida
(pCalcula = (BDCCALCULA) GetProcAddress (*hDll, "BdcCalcul
(pCierra = (BDCCIERRA) GetProcAddress (*hDll, "BdcCierra
(pDesNumero = (BDCDESNUMERO) GetProcAddress (*hDll, "BdcDesNum
(pDesCodigo = (BDCDESCODIGO) GetProcAddress (*hDll, "BdcDesCod
(pRendimiento = (BDCRENDIMIENTO) GetProcAddress (*hDll, "BdcRendim
(pPrecio = (BDCPRECIO) GetProcAddress (*hDll, "BdcPrecio
(pCodigo = (BDCCODIGO) GetProcAddress (*hDll, "BdcCodigo
(pResumen = (BDCRESUMEN) GetProcAddress (*hDll, "BdcResume
(pTexto = (BDCTEXTO) GetProcAddress (*hDll, "BdcTexto"
(pPliego = (BDCPLIEGO) GetProcAddress (*hDll, "BdcPliego
(pComentario = (BDCCOMENTARIO) GetProcAddress (*hDll, "BdcComent
(pClaves = (BDCCLAVES) GetProcAddress (*hDll, "BdcClaves
(pError = (BDCERROR) GetProcAddress (*hDll, "BdcError"
*Err = "";
return TRUE;
} else {
*Err = "FUNCION INEXISTENTE EN LA LIBRERIA";
return FALSE;
}
}
BOOL
CierraDll (
HMODULE hDll,
char **Err )
{
if (hDll) {
if ( !FreeLibrary (hDll) ) {
*Err = "ERROR AL CERRAR LA LIBRERIA";
return FALSE;
} else {
*Err = "";
return TRUE;
}
} else {
*Err = "NO HAY LIBRERIA QUE CERRAR";
return FALSE;
}
}

Especificación FIEBDC-3/98 / 673


BOOL
ChequeaError (
HANDLE Precio,
FILE *f,
BOOL EsGlobal )
{
char *MensajeError;
BOOL CodigoError;
CodigoError= EsGlobal ? pGloError (&MensajeError) : pError (Precio, &MensajeError)
if (CodigoError & BDCERR_CORRECTO)
return TRUE;
if (CodigoError & BDCERR_BASE_DATOS)
fprintf (f,"ERROR: %s\n",MensajeError);
if (CodigoError & BDCERR_PARAMETRO)
fprintf (f,"ERROR: El parámetro no existe\n");
if (CodigoError & BDCERR_OPCION)
fprintf (f,"ERROR: La opción no existe\n");
if (CodigoError & BDCERR_MAX_OPCIONES)
fprintf (f,"ERROR: Se alcanzó el máximo número de opciones (62)\n");
if (CodigoError & BDCERR_NO_LEIDO)
fprintf (f,"ERROR: El concepto paramétrico no fue leído\n");
if (CodigoError & BDCERR_NO_CALCULADO)
fprintf (f,"ERROR: El derivado paramétrico no fue calculado\n");
if (CodigoError & BDCERR_DESCOMPOSICION)
fprintf (f,"ERROR: No existe un elemento de la descomposición\n");
if (CodigoError & BDCERR_SIN_CODIGO)
fprintf (f,"ERROR: El concepto no tiene código definido\n");
if (CodigoError & BDCERR_SIN_MEMORIA)
fprintf (f,"ERROR: Memoria insuficiente\n");
if (CodigoError & BDCERR_CONCEPTO_NULO)
fprintf (f,"ERROR: El concepto es erróneo\n");
return FALSE;
}
Archivo ‘programa.c’

#define STRICT
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "programa.h"
int main (void) {
HANDLE Precio=(HANDLE)0, PrecioTmp=(HANDLE)0;
HINSTANCE hLib=(HINSTANCE)0;
FILE *fSalida;
char *err, codigo[20];
const char *texto;
char *Precios [] = {"ABPH.1$", "SBRG.1$", "EADR.3$", "NoExiste"};
int nPrecios = 4;
int i,j,k;
long limite,nParGlobales=0,ListaOpcGlobales[20];
long nPar,nOpc[20],ListaOpc[20],ListaOpc2[20];
double numero;
printf ("\nEJEMPLO DE PROGRAMA QUE ACCEDE A LA BASE \"BASE.DLL\"\n");
printf ("LOS RESULTADOS SE ESCRIBEN EN EL ARCHIVO \"SALIDA.TXT\"\n");
if ( !(fSalida = fopen ("SALIDA.TXT", "wt")) ) {
printf ("\nERROR: Imposible crear el archivo de salida\n");
printf ("\n\nPROGRAMA FINALIZADO\nPulse una tecla\n");
getch();

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 674


return FALSE;
}
fprintf (fSalida,"\nEJEMPLO DE PROGRAMA QUE ACCEDE A LA BASE \"BASE.DLL\"\n")
if (!AbreDll("BASE.DLL", &hLib, &err)) {
fprintf (fSalida,"\nERROR: %s\n", err);
printf ("\n\nPROGRAMA FINALIZADO\nPulse una tecla\n");
getch();
return FALSE;
}
// Lectura del Paramétrico Global
printf ("\nBUSCANDO EL PARAMETRICO GLOBAL...");
if ( !(ChequeaError ((HANDLE)0, fSalida, TRUE)) ) {
printf ("\nLEYENDO EL PARAMETRICO GLOBAL...");
nParGlobales = pGloParNumero();
if (nParGlobales==ERRONEO)
ChequeaError ((HANDLE)0, fSalida, TRUE);
fprintf (fSalida,"\nPrecio Global: Número de parámetros: %ld\n", nParGlob
for (j=0; j<nParGlobales; j++) {
ListaOpcGlobales[j]=0;
if (!(texto=pGloParRotulo(j)))
ChequeaError ((HANDLE)0, fSalida, TRUE);
else
fprintf (fSalida,"\nParámetro %d: Rótulo: %s\n", j+1, texto);
limite=pGloOpcNumero(j);
if (limite==ERRONEO)
ChequeaError ((HANDLE)0, fSalida, TRUE);
for (k=0; k<limite; k++) {
if (!(texto=pGloOpcRotulo(j,k)))
ChequeaError ((HANDLE)0, fSalida, TRUE);
else
fprintf (fSalida,"\tOpción %d: Rótulo: %s\n", k, texto);
}
}
pGloCalcula (ListaOpcGlobales);
}
// Lectura de los precios
for (i=0; i<nPrecios; i++) {
printf ("\n\nBUSCANDO EL PRECIO \"%s\"...", Precios[i]);
if ( (Precio = pLee (Precios[i])) == (HANDLE) 0 ) {
fprintf (fSalida,"\nERROR: El precio \"%s\" no existe\n", Precios[i])
continue;
}
// Rótulos de Parámetros y Opciones
printf ("\nLEYENDO EL PRECIO \"%s\"...", Precios[i]);
nPar = pParNumero(Precio);
if (nPar==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"\nPrecio \"%s\": Número de parámetros: %ld\n", Prec
for (j=0; j<nPar; j++) {
if (!(texto=pParRotulo(Precio,j)))
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"\nParámetro %d: Rótulo: %s\n", j+1, texto);
nOpc[j]=pOpcNumero(Precio,j);
if (nOpc[j]==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
ListaOpc[j]=0;

Especificación FIEBDC-3/98 / 675


for (k=0; k<nOpc[j]; k++) {
if (!(texto=pOpcRotulo(Precio,j,k)))
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"\tOpción %d: Rótulo: %s\n", k+1, texto);
}
}
//Listado de todas las combinaciones paramétricas
printf ("\nCALCULANDO EL PRECIO \"%s\"...", Precios[i]);
do {
if (pValida (Precio, ListaOpc)==ERRONEO) {
fprintf (fSalida,"\n");
ChequeaError (Precio, fSalida, FALSE);
fprintf (fSalida,"(CODIGO : %s)\n", pCodigo(Precio));
goto siguiente;
}
pCalcula (Precio, ListaOpc);
if (!(texto=pCodigo(Precio))) {
ChequeaError (Precio, fSalida, FALSE);
sprintf (codigo,"");
} else
strcpy (codigo, texto);
if ((PrecioTmp=pDecodifica (codigo, ListaOpc2)) == (HANDLE)0)
ChequeaError (Precio, fSalida, FALSE);
pCierra (PrecioTmp);
fprintf (fSalida,"\nCODIGO: %s\n", codigo);
fprintf (fSalida,"OPCIONES: ");
for (j=0; j<nPar; j++)
fprintf (fSalida,"%d ",ListaOpc2[j]);
if (!(texto=pResumen(Precio)))
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"\nRESUMEN:%s\n", texto);
if (!(texto=pTexto(Precio)))
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"TEXTO:%s\n", texto);
if (!(texto=pPliego(Precio)))
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"PLIEGO:%s\n", texto);
limite=pDesNumero(Precio);
if (limite==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
else if (limite) {
fprintf (fSalida,"DESCOMPOSICION:\n");
for (j=0; j<limite; j++) {
if (!(texto=pDesCodigo(Precio,j)))
ChequeaError (Precio, fSalida, FALSE);
else if (pRendimiento(Precio,j,&numero)==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
else
fprintf (fSalida,"\t%2d %-10s \t%10.3lf\n", j+1, texto, numero
}
} else {
if (pPrecio(Precio, &numero)==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
else

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 676


fprintf (fSalida,"PRECIO:%.2lf\n", numero);
}
siguiente:
for (j=nPar-1; j>=0; j--) {
if (ListaOpc[j]<nOpc[j]-1) {
ListaOpc[j]++;
break;
} else {
ListaOpc[j]=0;
}
}
if (j<0) break;
} while (TRUE);
pCierra (Precio);
}
//Ejemplo de decodificar
printf ("\n\nDECODIFICANDO EL PRECIO \"SBRG.1_38\"...");
if ((Precio=pDecodifica("SBRG.1_38",ListaOpc2))==(HANDLE)0)
ChequeaError (Precio, fSalida, FALSE);
else {
if (!(texto=pCodigo(Precio))) {
ChequeaError (Precio, fSalida, FALSE);
sprintf (codigo,"");
} else
strcpy (codigo, texto);
nPar = pParNumero(Precio);
if (nPar==ERRONEO)
ChequeaError (Precio, fSalida, FALSE);
fprintf (fSalida,"\n\nDecodificando SBRG.1_38:");
fprintf (fSalida,"\nCODIGO DEL CONCEPTO PARAMETRICO: %s\n", codigo);
fprintf (fSalida,"OPCIONES: ");
for (j=0; j<nPar; j++)
fprintf (fSalida,"%d ",ListaOpc2[j]);
}
pCierra (Precio);
fcloseall();
if (!CierraDll ((HMODULE)hLib, &err) ) {
fprintf (fSalida,"\nERROR: %s\n", err);
printf ("\n\nPROGRAMA FINALIZADO\nPulse una tecla\n");
getch();
return FALSE;
}
printf ("\n\nPROGRAMA FINALIZADO\nPulse una tecla\n");
getch();
return TRUE;
}

Especificación FIEBDC-3/98 / 677


Cambios FIE98 respecto a FIEBDC-3/95
Estos son los apartados y registros del FIEBDC-3/95 afectados por ampliaciones y/o
modificaciones:

FORMATO FIEBDC-3:

~V. Registro tipo PROPIEDAD Y VERSION.

~C. Registro tipo CONCEPTO.

~P. Registro tipo DESCRIPCION PARAMETRICA.

~O. Registro tipo INFORMACION COMERCIAL, que pasa a denominarse RELACION


COMERCIAL.

Se añade el registro ~X. Registro tipo INFORMACION TÉCNICA.

Se añade el nuevo tratamiento de DESCRIPCIÓN PARAMÉTRICA: API ESTANDAR para


descripciones paramétricas compiladas en DLL (Anexo 3).

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 678


Especificación FIEBDC-3/95
Generalidades

Toda la información necesaria para reconstruir completamente una base de datos u


obra en soportes físico y lógico distintos a aquellos en los cuales se produjo la
información es el objetivo del formato FIEBDC, Formato de Intercambio Estándar de
Bases de Datos de la Construcción.

La información de una base de datos, obra o certificación se dispondrá en cualquier


número de archivos en formato FIEBDC, con la extensión ".BC3", teniendo en cuenta
que estos archivos ordenados alfabéticamente contengan la información en el orden
deseado.

La única limitación de tamaño de cada archivo será la máxima que permita el soporte
físico utilizado para su transporte. Si se utiliza algún tipo de compresor de archivos, se
deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.

El juego de caracteres a emplear en los campos código será el definido por MS-DOS 6.0,
incluyendo < . > (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), < %> (ASCII-37), < & >
(ASCII-38), < _ > (ASCII-95).

El fin de línea será el estándar de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin de
archivo se marcará según el mismo estándar (ASCII-26). El único carácter de control
adicional que se permitirá será el tabulador (ASCII-9).

Cada archivo estará compuesto de registros, zonas de texto entre el carácter de


principio de registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la división de
archivos se deberá realizar al comienzo de un registro (carácter < ~ >).

Cada registro estará compuesto de campos separados por caracteres < | > (ASCII-124).

Especificación FIEBDC-3/95 / 679


Todo campo con información tendrá que finalizar con el separador de campos y el
registro deberá contener todos los separadores de campos anteriores, aunque no
contengan información. No es necesario disponer de finalizadores de los campos
posteriores al último con información.

Cada campo estará compuesto de subcampos separados por caracteres < \ > (ASCII-92).
El separador final, entre el último dato de un campo y el fin de campo es opcional.

El primer campo de cada registro es la cabecera de registro, una letra mayúscula que
identifica el tipo de registro.

Se ignorará cualquier información entre el último separador de campos de un registro


(carácter < | >) o el comienzo del archivo y el comienzo del siguiente registro (carácter
< ~>).

Se ignorarán los caracteres blancos (32), tabuladores (9) y de fin de línea (13 y 10),
delante de los separadores < ~ >, < | > y < \ >.

La disposición de registros dentro de un archivo es completamente libre, pero se


garantizará la lectura secuencial de los mismos para evitar ambigüedades en las
sustituciones de información.

Los campos vacíos se considerarán SIN INFORMACIÓN, no con información nula, esto
permite producir archivos de actualización que contengan únicamente la información
en alguno de sus campos y, por supuesto, el CÓDIGO de referencia.

Para anular un campo numérico deberá aparecer explícitamente el valor 0 (cero).

Para anular un campo alfanumérico deberá aparecer explícitamente el ROTULO NUL.

CONVENIOS DE NOTACIÓN

[a] Indica nada o "a"

{a} Indica cero o más ocurrencias de "a"

(<DD>c) Tamaño máximo en número de caracteres del campo

Todos los valores numéricos irán sin separadores de miles y con el carácter
punto '.' entre la parte entera y la decimal.

Registro tipo propiedad y versión


Este registro se utiliza para documentar la procedencia y el formato de los archivos y,
cuando exista, se dispondrá al comienzo del primer archivo.

~V |PROPIEDAD_ARCHIVO | VERSION_FORMATO \ DDMMAA |

PROGRAMA_EMISION| [CABECERA] \ {ROTULO_IDENTIFICACION \ } |

PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra, fecha, ...

VERSION_FORMATO: Versión del formato del archivo, la actual es FIEBDC-3

DDMMAA: DD representa el día con dos dígitos, MM el mes y AA el año, si la fecha

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 680


tiene menos de 5 dígitos representa mes y año únicamente, si tiene menos de tres,
solo el año. Si se identifica la fecha con un número impar de dígitos, se completará
con el carácter cero por la izquierda.

PROGRAMA_EMISION: Programa y/o empresa que genera los archivos en formato


BC3.

CABECERA: Título general de los ROTULOS_IDENTIFICACION.

ROTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en


el campo PRECIO del registro ~C, que tal como se indica en su especificación, puede
representar distintas épocas, ámbitos geográficos, etc., estableciéndose una relación
biunívoca entre ambos.

Registro tipo concepto


Este registro contiene la información básica de un concepto de cualquier tipo,
material, auxiliar, partida, capítulo, entidad, documento, etc., tanto en su versión
paramétrica como definición tradicional.

~C | {CODIGO \ } |UNIDAD | RESUMEN | { PRECIO \} | { FECHA \ } |TIPO

| CURVA_PRECIO_SIMPLE | CURVA_PRECIO_COMPUESTO |

CODIGO: CODIGO del concepto descrito. Un concepto puede tener varios CODIGOs
que actuarán como sinónimos, este mecanismo permite integrar distintos
sistemas de clasificación.

Para distinguir el concepto tipo raíz de un archivo, así como los conceptos tipo
capítulo, se ampliará su CODIGO con los caracteres '##' y '#' respectivamente;
quedando dicha notación reflejada obligatoriamente en el registro tipo ~C, siendo
opcional en los restantes registros del mismo concepto.

Las referencias a un CODIGO con y sin #, se entienden únicas a un mismo


concepto.

Únicamente puede haber un concepto raíz en una base de datos u obra, siendo
obligatorio que figure.

UNIDAD: Unidad de medida.

RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el número de


caracteres que admite en su campo resumen.

PRECIO: Precio del concepto. Un concepto puede tener varios precios alternativos que
representen distintas épocas, ámbitos geográficos, etc.

FECHA: Fecha de la última actualización del precio. Cuando haya más de una fecha
se asignarán secuencialmente a cada precio definido, si hay más precios que fechas,
los precios sin su correspondiente fecha tomarán la última fecha definida.

Las fechas se definirán en el formato DDMMAA; DD representa el día con dos dígitos,
MM el mes y AA el año, si la fecha tiene menos de 5 dígitos representa mes y año
únicamente, si tiene menos de tres, solo el año. Si se identifica la fecha con un
número impar de dígitos, se completará con el carácter cero por la izquierda.

Especificación FIEBDC-3/95 / 681


TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos:

0(Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 (Materiales)

CURVA_PRECIO_SIMPLE: Indicará una curva de variación del precio unitario


correspondiente, según propuesta definida por el Banco de Precios de la Construcción
de Aragón (perteneciente a la Diputación General de Aragón).

CURVA_PRECIO_COMPUESTO: incluirá un conjunto de coeficientes de variación de


precio en función de la cantidad utilizada de este precio en la obra. Actualmente
utilizados por la base de datos de EDETCO.

Registro tipo descomposición


Este registro contiene la descomposición de un concepto en otros a través de una o
dos cantidades. El mismo registro lo emplearemos para definir la descomposición de
un concepto tipo unidad de obra en conceptos tipo materiales, mano de obra,
maquinaria y auxiliares y para la descomposición de un concepto tipo capítulo en
conceptos tipo unidad de obra o subcapítulo.

~D |CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

CODIGO_PADRE: CODIGO del concepto descompuesto.

CODIGO_HIJO: CODIGO de cada concepto que interviene en la descomposición

FACTOR: Factor de rendimiento, por defecto 1.0

RENDIMIENTO: Número de unidades, rendimiento o medición.

El CODIGO_HIJO, cuando es un porcentaje, tiene tres partes:

1. Prefijo que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un juego de caracteres que puede ser:

'&' para porcentajes acumulables.

'%' para porcentajes no acumulables expresados en tantos por uno.

3. El resto del CODIGO permite diferenciar un porcentaje de otro.

Ejemplo: LD%N0001

LD - Sobre todas las líneas anteriores cuyo CODIGO comience por LD

% - No acumulable en tanto por uno.

N0001 - CODIGO diferenciador.

El rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la actual
y que queden afectadas por la máscara.

Ejemplo de una línea de descomposición: L%N004 \\0.03\

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 682


Esta línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo CODIGO comience por L y cuyo texto
estará en la definición del CODIGO 'L%N004'.

Registro tipo añadir descomposición


Con este registro se pueden añadir líneas de descomposición, el registro tipo ~D
cambia la descomposición completa. Para añadir conceptos nuevos a una base de
datos, además de definir los registros C,T,L,D,... deberíamos posicionar los nuevos
conceptos en el capítulo o capítulos donde queramos situarlos, para ello, es necesario
un registro que nos permita añadir una o varias líneas de descomposición por cada
capítulo donde queramos posicionar un nuevo concepto.

~Y |CODIGO_PADRE |{CODIGO_HIJO \FACTOR \RENDIMIENTO \} |

Todos los campos tienen el mismo significado que en el registro tipo D.

Registro tipo texto


Este registro contiene el texto descriptivo de un concepto

~T |CODIGO_CONCEPTO |TEXTO_DESCRIPTIVO |

CODIGO_CONCEPTO: CODIGO del concepto descrito

TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de tamaño.


El texto podrá contener caracteres fin de línea (ASCII-13 + ASCII-10) que se
mantendrán al reformatearlo.

Registro tipo descripciones paramétricas


Este registro contiene la descripción paramétrica que incluye la definición de
parámetros, descomposiciones, comentario de ayuda a la selección de parámetros,
resúmenes, textos, pliegos, claves e información comercial, en función de tablas,
expresiones y variables, para una familia de conceptos.

~P |CODIGO_FAMILIA |DESCRIPCION_PARAMÉTRICA |

CODIGO_FAMILIA: CODIGO del concepto tipo familia descrito.

DESCRIPCION_PARAMÉTRICA. Ver Anexo 1

Registro tipo pliegos


Este registro contendrá las diferentes secciones del pliego de condiciones de un
concepto. El pliego de condiciones se estructura de forma jerárquica con el Sistema
de Clasificación por Codificación y de forma facetada en varias secciones de distinto
contenido.

El registro tipo pliego puede adoptar dos formas, cuando el primer campo está vacío, el
registro definirá los CÓDIGOS de cada pliego y sus RÓTULOS correspondientes. Este
registro es único para una base de datos u obra.

~L| | { \CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO }|

CODIGO_SECCION_ PLIEGO- CODIGO que define cada SECCION o faceta del pliego.

Especificación FIEBDC-3/95 / 683


ROTULO_SECCION_PLIEGO- Definición del ROTULO asociado a cada CODIGO
correspondiente de cada SECCION o faceta del pliego.

Cuando el primer campo no está vacío, identifica a un concepto determinado. Puede


haber un registro de este tipo por cada concepto de una base de datos u obra.

~L | CODIGO_CONCEPTO | { \CODIGO_SECCION_PLIEGO

\ TEXTO_SECCION_PLIEGO \} |

CODIGO_CONCEPTO - CODIGO del concepto descrito, contenido en la base de datos.

CODIGO_SECCION_PLIEGO - Definición del CODIGO asociado a cada pliego.

TEXTO_SECCION_PLIEGO - Texto asignado a cada faceta o SECCION del pliego de


condiciones del concepto.

El pliego de condiciones de cada concepto estará dividido con caracteres '\' en varias
secciones o facetas, pensadas para imprimirse juntas o por separado.

Los fines de línea de cada SECCION del pliego se tratarán como en el REGISTRO TIPO
TEXTO.

Ejemplo de las secciones de los pliegos definidas para la Base de Datos de la


Construcción de la Comunidad de Madrid y la Base de Datos de la Construcción de la
Comunidad Valenciana, indicando CODIGO y ROTULO de la SECCION:
~L| | DES\ DESCRIPCION Y COMPLEMENTOS AL TEXTO

\PRE\ REQUISITOS PREVIOS A LA EJECUCIÓN

\COM\ COMPONENTES

\EJE\ EJECUCIÓN Y ORGANIZACIÓN

\NOR\ NORMATIVA

\CON\ CONTROL Y ACEPTACIÓN

\SEG\ SEGURIDAD E HIGIENE

\VAL\ CRITERIOS DE VALORACIÓN Y MEDICION

\MAN\ MANTENIMIENTO

\VAR\ VARIOS \ |

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO

\ { ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |

CÓDIGO_CONCEPTO - Código del concepto descrito, contenido en la base de datos.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 684


Será único para cada registro ~Q.

Este registro es de sustitución de la información, no es de acumulación.

CÓDIGO_SECCION_PLIEGO - Definición del código asociado a cada pliego.


Corresponde al definido en el registro de cabecera de pliego ~L.

CODIGO_PARRAFO - Código del texto asociado a cada sección del pliego.

ABREV_AMBITO - Identificador del ámbito geográfico de la sección del pliego.

TEXTO_PARRAFO - Texto que define el contenido de los pliegos que se asocian a un


concepto y se identifica con CODIGO_PARRAFO.

TEXTO_PARRAFO_RTF - Texto que define el contenido de los pliegos que se asocian a


un concepto y se identifica con CODIGO_PARRAFO, con formato RTF, de forma
opcional, siendo siempre obligatorio el campo TEXTO_PARRAFO.

Registro tipo ámbito geográfico


Establece el ámbito geográfico correspondiente a los Pliegos de Condiciones asociados
a la Base de Datos. No necesariamente deberá corresponder al campo CABECERA
definido en el registro ~V.

~W | { ABREV_AMBITO \ AMBITO \ } |

ABREV_AMBITO - Nombre abreviado que identifica el territorio geográfico al que se


refiere. (Comunidad Autónoma, Provincia, Región, Comarca, Localidad, etc...). El
identificador < * > (ASCII - 42) indica AMBITO_GENERAL, y representa todo el
territorio nacional.

AMBITO - Nombre completo del territorio geográfico.

Registro tipo información gráfica


~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

CODIGO_CONCEPTO: Código del concepto descrito en la base de datos y contenido


en ella.

ARCHIVO_GRAFICO. EXT: Nombre del archivo que contiene la información gráfica.


Se usarán como referencia programas estandarizados de uso general, para
chequear y verificar el contenido del archivo. Estos programas serán:

Para archivos tipo ráster (mapa de bits): de extensión .BMP, .PCX : Windows 3.1

Para archivos vectoriales: de extensión .WMF : Windows 3.1 de extensión .DXF :


Autocad 12 Windows

Registro tipo entidad


Define las entidades suministradoras de documentación técnica, tarifas de precios y
especificaciones de los conceptos contenidos en la Base de Datos.

~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO\ SUBNOMBRE

Especificación FIEBDC-3/95 / 685


\ DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS \ { TELÉFONO; }

\ { FAX; } \ { PERSONA_CONTACTO; } \ } |

CODIGO_ENTIDAD: código del SCc que define a la entidad (empresa, organismo, etc.).

RESUMEN: nombre abreviado de la entidad

NOMBRE: nombre completo de la entidad.

TIPO: se definen los siguientes:

C central.

D delegación.

R representante.

SUBNOMBRE: nombre de la delegación o representante en caso de que sea distinto de


la central. Normalmente estará vacío.

DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS : será la dirección postal de la


empresa con todos sus datos, existiendo una dirección por cada subcampo tipo, de
forma ordenada y secuencial.

TELÉFONO: teléfonos de la empresa, de forma ordenada y secuencial respecto al


subcampo tipo, separados con el carácter < ; > (ASCII-59). Se indicará con nueve
caracteres numéricos, incluido el prefijo de la provincia.

FAX: fax de la empresa, con las mismas especificaciones que el campo anterior.

PERSONA_CONTACTO: nombre de las personas de contacto con la empresa y cargo


que desempeña, podrá haber varias asociadas a cada subcampo tipo, de forma que
estén separadas por el carácter ASCII-59.

Registro tipo información comercial


El registro tipo información comercial relaciona los conceptos de la Base de Datos con
las entidades, empresas, organismos, fabricantes, productos comerciales y tarifa de
los mismos:

Con el fin de mantener la compatibilidad de versiones anteriores, se amplía un


tercer campo por la derecha, quedando de la siguiente forma:

~O| CODIGO_CONCEPTO | {CODIGO_ENTIDAD \ TARIFA \ } |

{ CODIGO_ENTIDAD \ PRODUCTO_COMERCIAL\ { TARIFA; } |

CODIGO_CONCEPTO: Concepto de la BD al que se asocia un producto comercial.

CODIGO_ENTIDAD: Identificación del fabricante en la BD, de acuerdo con su sistema


de clasificación.

PRODUCTO_COMERCIAL: Código del producto, facilitado por el fabricante, que se


asocia al código_concepto de la BD. No podrá coincidir nunca con la designación de
CODIGO_ENTIDAD.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 686


TARIFA: Importe del producto_comercial de cada fabricante. El número de tarifas y su
ordenación corresponderá a la especificación definida en ~V en su
campo \ROTULO_IDENTIFICACION\.

Registro tipo coeficientes


~K | DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM | CIE |

DN :Decimales del campo número de partes iguales de la hoja de mediciones.

DD :Decimales de Dimensiones de las tres magnitudes de la hoja de mediciones.

DS :Decimales de la línea de subtotal o total de mediciones

DR :Decimales de rendimiento y factor en una descomposición.

DI :Decimales del importe resultante de multiplicar rendimiento x precio el


concepto.

DP :Decimales del importe resultante del sumatorio de los costes directos del
concepto.

DC :Decimales del importe total del concepto. (CD+CIE).

DM :Decimales del importe resultante de multiplicar la medición total del concepto


por su precio.

CIE:Porcentaje de costes indirectos de ejecución.

Registro tipo mediciones


En este registro figuran las mediciones (cantidades), en que interviene un concepto
de un presupuesto en la descomposición de otro de mayor rango.

En el intercambio de archivos de presupuestos, deberá figurar siempre este registro,


exista o no desglose de mediciones.

Cuando se trate de intercambiar una relación de registros ~M que recogen un


informe de mediciones no estructurado, no es necesario la disposición de un código
raíz ni los registros ~D complementarios. El operador indicará en estos casos cual es
el destino de la medición.

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION_TOTAL

| { TIPO \ COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

CODIGO_PADRE: CODIGO del concepto padre o concepto descompuesto del


presupuesto.

CODIGO_HIJO: CODIGO del concepto hijo o concepto de la línea de descomposición.

Este campo es opcional en el caso de intercambiar mediciones no estructuradas, es


decir, que no pertenecen a la estructura general y completa de un presupuesto.

POSICION: Posición del CONCEPTO_HIJO en la descomposición del


CONCEPTO_PADRE, este dato permite identificar la medición cuando la

Especificación FIEBDC-3/95 / 687


descomposición del concepto padre incluye varios conceptos hijo con el mismo
CODIGO, la numeración de las posiciones comenzará con el 1.

El campo POSICION deberá especificarse siempre en intercambio de presupuestos


cuando éste sea completo y estructurado, e indicará el camino completo de la
medición descrita en la estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la
medición correspondiente al capítulo 3 del archivo; subcapítulo 5 del capítulo 3; y
partida 2 del subcapítulo 5. En mediciones no estructuradas este campo es opcional.

MEDICION_TOTAL: Debe coincidir con el rendimiento del registro tipo '~D'


correspondiente.

Incorpora el sumatorio del producto de unidades, longitud, latitud y altura o el


resultado de expresiones de cada línea, al leer este registro se recalculará este valor.

TIPO: Indica el tipo de línea de medición de que se trate. Usualmente este subcampo
estará vacío. Los tipos establecidos en esta versión son:

Subtotal parcial: En esta línea aparecerá el subtotal de las líneas anteriores desde
el último subtotal hasta la línea inmediatamente anterior a ésta.

Subtotal acumulado: En esta línea aparecerá el subtotal de todas las líneas


anteriores desde la primera hasta la línea inmediatamente anterior a ésta.

Expresión: Indicará que en el subcampo COMENTARIO aparecerá una expresión


algebraica a evaluar. Se podrán utilizar los operadores '(', ')', '+', '-', '*', '/' y '^'; las
variables 'a', 'b', 'c' y 'd' (que tendrán por valor las cantidades introducidas en los
subcampos UNIDADES, LONGITUD, LATITUD y ALTURA respectivamente); y la
constante 'p' para el valor Pi=3.1415926. Si la expresión utiliza alguna variable,
ésta será válida hasta la siguiente línea de medición en la que se defina otra
expresión.

COMENTARIO: Texto en la línea de medición. Podrá ser un comentario o una


expresión algebraica.

UNIDADES, LONGITUD, LATITUD, ALTURA: Cuatro número reales con las


mediciones. Si alguna magnitud no existe se dejará este campo vacío.

Registro tipo añadir mediciones


Igual que el registro tipo M pero añade las líneas de medición de este registro a las ya
existentes en vez de sustituir toda la medición como hace en aquel.

~N |[CODIGO_PADRE \]CODIGO_HIJO |{POSICION \} |MEDICION

|{TIPO \COMENTARIO \UNIDADES \LONGITUD \LATITUD \ALTURA \} |

Registro tipo claves


Este registro establece la relación entre CODIGOs y descriptores del tesauro, para
permitir la búsqueda de conceptos mediante términos clave.

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \} |

CODIGO_CONCEPTO: CODIGO del concepto descrito en la base de datos y contenido

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 688


en ella.

CLAVE_TESAURO: Términos clave relacionados con el concepto. Los términos


compuestos (hormigón armado, cartón - yeso, mortero mixto) se identificarán unidos
mediante < _ > (ASCII - 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No
está permitido el empleo del espacio en blanco.

Registro tipo cambio de código


Con este registro se posibilita el cambio o anulación de los CODIGOs de los
conceptos, única unidad de información que no se podía modificar con los registros
definidos anteriormente.

~B |CODIGO_CONCEPTO | CODIGO_NUEVO |

CODIGO_CONCEPTO: CODIGO del concepto a cambiar o anular.

CODIGO_NUEVO: Nuevo CODIGO para CODIGO_CONCEPTO, no debe existir


previamente. Si este campo está vacío, se entiende que hay que eliminar
CODIGO_CONCEPTO.

Resumen de tipos de registros


Formato de intercambio estándar

~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \ DDMMAA |


PROGRAMA_EMISION| CABECERA \ {ROTULO_IDENTIFICACION} |

~C | { CODIGO \ } | UNIDAD | RESUMEN | { PRECIO \ } | { FECHA \ } | TIPO |


CURVA_PRECIO_SIMPLE | CURVA_PRECIO_COMPUESTO |

~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \ RENDIMIENTO \ } |

~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |

~P | CODIGO_FAMILIA | DESCRIPCION_PARAMÉTRICA |

~L | | { \CODIGO_SECCION_PLIEGO \ ROTULO_SECCION_PLIEGO }|

~L | CODIGO_CONCEPTO | { \CODIGO_SECCION_PLIEGO \
TEXTO_SECCION_PLIEGO \} |

~Q | { CODIGO_CONCEPTO \ } | { CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO \


{ ABREV_AMBITO; } \ } |

~J | CODIGO_PARRAFO | TEXTO_PARRAFO | TEXTO_PARRAFO_RTF |

~W | { ABREV_AMBITO \ AMBITO \ } |

~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT \ } |

Especificación FIEBDC-3/95 / 689


~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | { TIPO \ SUBNOMBRE \
DIRECCIÓN \ CP \ LOCALIDAD \ PROVINCIA \ PAÍS \ { TELÉFONO; } \ { FAX; } \
{ PERSONA_CONTACTO; } \ } |

~O | CODIGO_CONCEPTO | {CODIGO_ENTIDAD \ TARIFA \ } |


{ CODIGO_ENTIDAD \ PRODUCTO_COMERCIAL\ { TARIFA; } |

~K | DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM | CIE |

~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \


COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | { POSICION \ } | MEDICION | { TIPO \


COMENTARIO \ UNIDADES \ LONGITUD \ LATITUD \ ALTURA \ } |

~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \} |

~B |CODIGO_CONCEPTO | CODIGO_NUEVO |

Procedimiento de lectura de descomposiciones paramétricas


Un concepto paramétrico es el que define su CODIGO, resumen, texto, pliego,
descomposición e información comercial de forma paramétrica, esto es, de una forma
variable mediante tablas y expresiones aritméticas y lógicas función de parámetros.

En la descripción paramétrica se encuentran las siguientes sentencias:

Se definen las variables:

%A %B %C %D - Parámetros seleccionados del concepto, de "a" a "z" ~ 1 a 26.

%O %P %Q %R - Parámetros seleccionados de la obra, de "a" a "z" ~ 1 a 26.

%E - Variable que define las condiciones de error.

$A $B $C $D - Textos de los parámetros seleccionados del concepto.

$O $P $Q $R - Textos de los parámetros seleccionados de la obra.

$E - Variable que define los textos de error.

De forma equivalente las variables %O a %R y $O a $R tomarían el valor


correspondiente a los valores de los parámetros generales de la obra.

Cualquier variable de la 'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se puede
definir o redefinir con cualquier número de dimensiones para ser utilizada
posteriormente en expresiones.

Se definen las constantes de la 'a' a la 'z' con los valores numéricos del 1 al 26
respectivamente, para permitir referenciar los parámetros de forma nemotécnica. Para
la utilización de otro tipo de caracteres, se determinará en el texto de la opción del
parámetro seleccionado el carácter de sustitución que se desea utilizar, anteponiéndole

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 690


un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se realiza
relacionando el carácter con la posición que ocupa.

Ejemplo:

PBPO.2$ M3 Hormigón $B $A

\ CONSISTENCIA \ plástica \ fluida \ blanda \

\ RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \

El derivado PBPO.2aa sería: M3 Hormigón H-125 plástica

Con el carácter especial:

\ CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \

\ RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \

El mismo derivado: PBPO.2p2 M3 Hormigón H-125 plástica.

Las variables numéricas deben permitir valores reales en coma flotante de doble
precisión (64bits) y las variables alfanuméricas deben poder almacenar textos de
cualquier tamaño.

Cualquier variable puede definirse, en la misma asignación, con cualquier número y


tamaño de dimensiones (hasta 4), en la definición de dimensiones tendrán que hacerse
explícitas todas las dimensiones.

%U=...... # define una variable con un dato numérico

$X(8)=..... # define una lista de 8 datos alfanuméricos

%V(3,4)= ..... # define una tabla con 3 filas y 4 columnas de datos n.

Las variables %E y $E son especiales para devolver errores producidos por selecciones
de parámetros no coherentes. En una evaluación secuencial de expresiones, si en una
expresión la variable %E adopta un valor distinto de 0, ha habido algún error, se
interrumpe la evaluación de expresiones y se presenta el contenido de la variable $E
donde se almacena el texto del error producido.

Pueden haber múltiples asignaciones de %E, cada una de ellas precedida de su


correspondiente texto de error, asignación de $E.

Las constantes alfanuméricas se definirán entre comillas ($I="incluida parte


proporcional").

En la descripción paramétrica podemos encontrar los siguientes tipos de sentencias:

SENTENCIA DE RÓTULOS DE PARAMETRO:

\ <ROTULO del parámetro> \ { <ROTULO de la opción> \ }

Los parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el orden
que se encuentren.

Especificación FIEBDC-3/95 / 691


SENTENCIA DE ASIGNACIÓN NUMÉRICA:

<variable numérica> = <expresión numérica>

SENTENCIA DE ASIGNACIÓN ALFANUMÉRICA:

<variable alfanumérica> = <expresión alfanumérica>

SENTENCIA DE RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)

<texto de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ] Se pueden


definir uno u opcionalmente dos rendimientos, el defecto del rendimiento opcional es 1.

SENTENCIA DE MEDIOS AUXILIARES:

%: <expresión numérica> (en tanto por cien)

%%: <expresión numérica> (en tanto por uno)

SENTENCIA DE PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>

En caso de figurar conjuntamente un juego de sentencias de rendimiento a modo de


descomposición y una sentencia de precio, tendrá prioridad la sentencia de precio,
ignorando las sentencias de rendimiento.

SENTENCIA DE COMENTARIO:

\ COMENTARIO \ ó \ C \ <texto del comentario> \

Si existe texto de comentario, se presentará como ayuda a la selección de parámetros


junto a las opciones de éstos.

SENTENCIA DE SUSTITUCION:

\ RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \

\ TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \

\ PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }

\ CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }

\ COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\ <expresión_numérica>\}

Se considera que una sentencia continua en la línea siguiente si:

acaba en un operador

acaba sin cerrar comillas '"'

comienza con '\' y no acaba con '\'

<constantes> PI, números, "texto" ...

<funciones> ABS( ), INT( ), SQRT( ) ...

<variables> [$%] [A-Z] [(dimensión{,dimensión})]

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 692


<expresión numérica>:

Son aquellas que dan como resultado un número en función de constantes y variables
numéricas, expresiones lógicas, funciones y operadores.

por ejemplo: %I= %A + 3.17*(1+%B) + ABS(%P+3.15*%Q)/12000

<expresión alfanumérica>:

Son aquellas que dan como resultada un texto en función de constantes y variables
alfanuméricas, operadores y funciones numéricas.

Una expresión alfanumérica puede incluir expresiones lógicas.

por ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)

añadir " de perdidas" a $I si el valor actual de %A es mayor que <a> ó 1.

<expresiones lógicas>:

Son aquellas que dan como resultado VERDADERO o FALSO, en expresiones numéricas
el verdadero se considera como 1 y el falso como 0, en alfanuméricas el falso se
considera suprimir texto.

%I = 323*(%A=a) + 345*(%A=b) + 1523*($I=$A & $J=$B)

$I = "blanco"*(%C=c) + "negro"*(%C=d)

<texto de sustitución>:

En los textos de sustitución la información es un texto constante (sin comillas) con


variables embebidas en él. Se consideran variables los caracteres $ y %
inmediatamente seguidos por una letra de la A hasta la Z.

En los textos de sustitución, las variables alfanuméricas se sustituyen por sus


contenido de texto correspondiente, las numéricas se sustituyen por las constantes de
la "a" a la "z" correspondientes al valor numérico de su contenido.

En la expresión del rendimiento, la primera parte de la sentencia es un texto de


sustitución que una vez sustituidas las variables será el CODIGO del concepto al que le
corresponde la expresión numérica de la segunda parte de la expresión como
rendimiento. Si el resultado es 0, se ignora la sentencia y no se considera ese
componente o línea de descomposición.

CONVENIOS DE NOTACIÓN (EBNF):

[a] - Indica nada o "a"

{a} - Indica cero o más ocurrencias de "a"

[a-b] - Indica cualquier valor desde "a" a "b" inclusive

[abc] - Indica cualquiera de los valores a, b ó c

<abc> - Indica descripción informal

Especificación FIEBDC-3/95 / 693


abc - Indica símbolo terminal

%[A-Z] - variable numérica

$[A-Z] - variable alfanumérica

Variables predefinidas:

[%$][ABCD] - parámetros del concepto [%$][OPQR] - parámetros de la obra

[%$]E - variable especial para reportar errores

[%$][A-Z][(dim{,dim})] - variables definibles

# - comentarios (el texto comprendido entre este carácter y el siguiente final de línea
exclusive, no se tiene en cuenta)

, - separador de datos

: - definición de rendimiento

:: - definición de precio

%: - definición de medios auxiliares en tanto por cien

%%:definición de medios auxiliares en tanto por uno

OPERADORES NUMÉRICOS

de menor a mayor precedencia

+-

*/

^ Operador elevado a

OPERADORES LÓGICOS

de menor a mayor precedencia

@ - Operador lógico O

& - Operador lógico Y

< > <= >=

= <>

! Operador lógico NO

FUNCIONES - VALOR RETORNADO

ABS(n) - Valor absoluto de "n"

INT(n) - Parte entera de "n"

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 694


ROUND(n,d) - Redondeo de "n" a "d" decimales

SIN(n), COS(n), TAN(n) - Seno, coseno y tangente (grados sexagesimales)

ASIN(n), ACOS(n), ATAN(n) - Arco seno, arco coseno y arco tangente (gs)

ATAN2(x,y) - Arco tangente con dos parámetros "x" e "y"

SQRT(n) - Raíz cuadrada de "n"

ATOF(a) - Conversión de alfanumérico "a" a numérico

FTOA(n) - Conversión de numérico "n" a alfanumérico

Cada instrucción irá en distinta línea, a menos que la instrucción acabe en un


operador en cuyo caso se considera que sigue en la siguiente línea.

Si una línea acaba sin haber cerrado las comillas '"' o delimitador '\', se considerará
que sigue en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.

Control de errores de selección


Es frecuente encontrar un gran número de combinaciones de parámetros posibles
pero tener pocas de ellas resueltas. Para evitar que el operador del sistema pruebe
distintas combinaciones de parámetros consiguiendo en todas ellas un mensaje de
error, el sistema debe ser capaz de guiarle en la selección de combinaciones
correctas.

Cada vez que el operador define un parámetro, el sistema evaluará todas las
sentencias posibles y en las sentencias del tipo:

%E= ...., función de parámetros

Si todos los parámetros que intervienen en la expresión son conocidos, se evaluará


ésta y si el resultado fuera de ERROR se presentará la previa definición de $E con el
mensaje del error.

Si todos los parámetros menos uno son conocidos, se irá dando valores al parámetro
desconocido y evaluando la expresión hasta recorrer todos los valores válidos del
parámetro. De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.

Cada vez que se defina o redefina un parámetro el sistema actualizará todos los
valores marcados en pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de
las opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.

Este sistema de control de errores de selección es sencillo de implementar en


cualquier soporte, pero obliga a los redactores de los descompuestos paramétricos a
definir explícitamente las combinaciones de parámetros incorrectas, ya que con este
método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios paramétricos.

Especificación FIEBDC-3/95 / 695


Procedimiento de lectura
Recorrer la descripción paramétrica ejecutando los siguientes pasos:

Eliminar desde el carácter '#' inclusive hasta el siguiente cambio de línea exclusive.

Cambiar tabuladores (9) por caracteres ' ' (32)

Eliminar caracteres ' ' (32) delante y detrás de los caracteres '\'

Unir líneas, eliminando el fin de línea, en líneas que comienzan con '\' y no acaban
con '\', que terminan con un operador y en la separación de datos de una variable
matricial.

Eliminar todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o delimitadas
(\...\)

Eliminar líneas vacías .

Leer y evaluar secuencialmente las sentencias de la forma:

Si la sentencia comienza con '\' leer el ROTULO hasta el siguiente '\', si el ROTULO
es:

COMENTARIO ó C- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como comentario a la selección de parámetros.

RESUMEN ó R- Palabra o carácter reservado que identifica el siguiente ROTULO


entre '\' como el texto de sustitución del resumen del concepto.

TEXTO ó T- Palabra o carácter reservado que identifica el siguiente ROTULO entre '\'
como el texto de sustitución del texto descriptivo del concepto.

PLIEGO ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de las distintas secciones del pliego.

CLAVES ó K- Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución de los términos claves asociados al concepto.

COMERCIAL ó F - Palabra o carácter reservado que identifica los siguientes ROTULOs


entre '\' como los textos de sustitución y tarifas de la información comercial del
concepto.

Cualquier otro ROTULO identificará el nombre del siguiente parámetro y los


siguientes ROTULOs entre '\' como los ROTULOs de las opciones de dicho parámetro.

Si la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.

Si la sentencia comienza con '%:' el resto de la misma debe ser una expresión
numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.

En otro caso si la sentencia contiene el carácter ':' la parte anterior a ‚l es un texto de

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 696


sustitución del CODIGO de una línea de descomposición y la posterior una expresión
pum‚rica, o dos separadas por ':', indicadoras de el o los rendimientos de dicha línea
de descomposición.

En aquellos casos donde pueda aparecer un carácter ’%’ seguido de un carácter


alfabético que se considere como tal y no como una variable de sustitución, deberá
emplearse ’%%’, para evitar la ambigüedad que se puede producir entre una variable
numérica que deba ser sustituida, una sentencia de medio auxiliar o un texto.

El resto de sentencias deberán ser de asignación de la forma variable/s = expresión/


es

Resumen de tipos de sentencias


Después de realizado el filtro descrito arriba, cada línea, tira de caracteres acabada
en (ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:

{ \ ROTULO_parámetro \ { opción_parámetro \ } (13)(10) }

{ variable = expresión (13)(10) }

{ CODIGO : rendimiento [ : rendimiento ] (13)(10) }

[ %: ó %%: medios_auxiliares (13)(10) ] % (en tanto por cien) %% ( en tanto por


uno)

[ :: expresión_precio (13)(10) ]

[ \ COMENTARIO \ ó \ C \ texto_comentario \ (13)(10) ]

[ \ RESUMEN \ ó \ R \ texto_resumen \ (13)(10) ]

[ \ TEXTO \ ó \ T \ texto_descriptivo \ (13)(10) ]

[ \ PLIEGO \ ó \ P \ { texto_faceta_pliego \ }(13)(10) ]

[ \ CLAVES \ ó \ K \ { término_clave \ }(13)(10) ]

[ \ COMERCIAL \ ó \ F \ { CODIGO_producto_comercial \ tarifa \ } (13)(10) ]

Especificación FIEBDC-3/95 / 697


Especificación FIE 1.01
Generalidades
FORM ATO DE INTERCAM BIO ESTÁNDAR PARA ARCHIVOS DE PRECIOS Y
PRESUPUESTOS. ESPECIFICACIÓN PARA EL USO DE PORCENTAJES. VERSIÓN
1.01.

Esta especificación ha sido sustituida por una versión más completa del estándar, que
se detalla en el tema Formato de intercambio estándar. Pertenecía a las empresas
fabricantes de software ARKTEC, FHECOR, MICROGESA, SOFT, STAR y TOOL, que lo
ponen a libre disposición de usuarios y empresas, con la única condición de que
cualquier implementación informática de la presente Norma, debe recogen tanto la
entrada como la salida de datos.

Características generales
La información de los distintos conceptos de agrupará en archivos, uno o varios de
cada tipo, sin que la capacidad de ningún archivo exceda la capacidad de un disco de
doble cara y doble densidad (aprox. 360k).

Con carácter general, los nombres de los archivos tendrán los tres primeros
caracteres del nombre fijos, dependiendo del concepto; los cinco siguientes, de libre
designación por la empresa creadora, para cuando sea necesario diferenciar archivos
del mismo tipo, de forma libre pero con la condición de que ordenados los archivos
alfabéticamente, el orden obtenido sea congruente con la información que contienen.

La extensión del nombre de archivo tendrá tres caracteres, los dos primeros de libre
designación, definiendo la empresa creadora, y el tercero, un dígito numérico: el
último dígito del año en curso. Ejemplo:
Tipo de archivo: Descompuesto

Número de orden: 1

Empresa: XX

Año: 1.996DES001.XX6

Especificación FIE 1.01 / 699


Instituciones creadoras de bases de datos en el presente formato tienen como clave
de empresa los siguientes dígitos:

EK: Dirección de arquitectura del Gobierno Vasco

IV: Instituto Valenciano de la edificación

FC: Fundación Codificación Banco de Precios de la Construcción

Dentro de cada archivo la información estará en formato ASCII, agrupada en un


registro por cada concepto; al final de cada uno, se colocarán los caracteres 13 y 10.
Al final de cada archivo habrá un carácter EOF.

Se usará como separador el carácter ASCII 124 “|”, pero no antes del primero ni
después del último campo.

Los textos en los archivos, irán sin ningún tipo de formateo (sin guiones y sin dividir
renglones), usando para caracteres especiales el código ASCII ampliado de IBM. No se
usará el separador 124 ni retorno de carro, ni nueva línea. Tampoco caracteres ASCII
inferiores al 31, inclusive.

Los precios en los archivos irán en pesetas; si hay céntimos, irán separados por un
punto decimal.

El código que identifica a cada unitario, auxiliar o descompuesto, será único.

Archivos de precios
Los nombres de los archivos del archivo de precios de iniciarán con las tres letras
siguientes, dependiendo de su contenido:

MDOmano de obra

MAQmaquinaria

MATmateriales

AUXauxiliares

DESdescompuestos

Estructura del campo de los archivos MDO, MAQ y MAT:

CÓDIGO | UNIDAD | TEXTO [| PRECIO]

siendo variable la longitud de cada campo y pudiendo llevar uno o varios precios.

El código será alfanumérico, no admitiéndose letras minúsculas o caracteres no


válidos en el nombre de un archivo MS-DOS, (entre otros, no serán válidos ‘*’ ni ‘?’).
Ejemplo:

05240 | M3 | Madera pino en tablas | 15.000

05220 | M3 | Madera pino en tablas | 17.000

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 700


Para los archivos AUX y DES, la estructura será:

CÓDIGO | UNIDAD | TEXTO | PORCENTAJE [| CÓDIGO2 | CANTIDAD ]

El código, unidad y texto, seguirán las normas enunciadas.

El porcentaje, si 3es distinto de cero, representa un porcentaje (en tanto por ciento)
sobre el total de la partida.

El código2 y cantidad se colocarán por parejas, tantas veces como líneas de


descomposición haya.

Concurrentemente con el anterior porcentaje o no, se pueden incluir porcentajes


como una línea más de descomposición con las siguientes características:

El código, cuando es un porcentaje, tiene tres partes:

1. Prefijo.- que forma una máscara indicando sobre qué elementos se aplica el
porcentaje. Si el prefijo es nulo, el porcentaje se aplica a todas las líneas
anteriores.

2. Un dígito.- que puede ser ‘&’ (porcentaje acumulable), o ‘%’ (porcentaje no


acumulable).

3. Una serie de caracteres libres que permite diferenciar un porcentaje de otro.

Ejemplo: OP%N0001

OP: Sobre todas la líneas anteriores cuyo código comience por OP.

%: Acumulable

N0001: Código

La CANTIDAD será el porcentaje en tanto por uno que se aplica sobre las líneas
anteriores a la actual y que queden afectadas por la máscara.

Ejemplo: Línea de descomposición de un descompuesto.

O%N0001 | 0.03

representa un porcentaje del 0.03 por 1 de todas las líneas anteriores a la actual,
cuyo código comience por O y cuyo texto estará en uno de los archivos de
elementales: mano de obra, maquinaria y materiales.

O%N0001 |%| Costos indirectos | 0

RECOMENDACIONES:

a/ Aunque pueden realizarse porcentajes complejos con el sistema de máscara, se


recomienda aplicar solamente los usuales, es decir: sobre mano de obra, materiales
y maquinaria, ya que la mayoría de programas no utilizan estas formas complejas.

b/ Si la base de datos está organizada por capítulos se recomienda que cada capítulo
de unitarios o descompuestos figure en un archivo diferente.

Especificación FIE 1.01 / 701


Presupuestos
El formato de presupuestos estará formado por dos grupos de archivos:

Base de precios elementales, auxiliares y descompuestos, exclusivamente con los


elementos que intervienen en la obra y con los mismos criterios expuestos con los
archivos de precios.

Capítulos de la obra

Cada capítulo de la obra tendrá un archivo cuyos tres primeros dígitos sean “CAP”;
los restantes, según el criterio expuesto con carácter general.

El formato de los archivos será:

TÍTULO DEL CAPÍTULO

ORDEN | CODIGO (| COMENTARIO | UNIDAD | LONGITUD | LATITUD | ALTURA)

La primera línea de archivo será el título de capítulo; las restantes, cada línea una
partida distinta con los siguientes campos:

ORDEN.- una sucesión de números separados por barra inclinada ‘/’ que representan
el capítulo, subcapítulo, apartado, sección, etc. según los niveles aceptados por cada
programa, sin ninguna limitación. Ejemplo:

2/8/13/4 significa capítulo 2, subcapítulo 8, apartado 13, partida 4 o los nombres que
cada implementación quiera darle.

CÓDIGO.- del descompuesto de la base de datos propia de la obra.

Figuran a continuación, tantos grupos de cinco campos como líneas de medición


tenga la partida.

COMENTARIO.- texto sin limitación, explicativo de la línea de medición.

UNIDAD, LONGITUD, LATITUD, ALTURA.- cuatro números reales con las mediciones.
Si alguna magnitud no existe, figurará un cero.

Aunque se permiten números reales en el campo de la unidad, es aconsejable


limitarse a enteros, colocando en el campo longitud las cantidades reales cuando
exista una sola magnitud.

El total de las mediciones de la línea, será el producto de las cuatro magnitudes,


siempre que éstas cifras sean distintas de cero.

Archivos especiales
En cada archivo de precios o presupuestos podrá figurar un archivo ASCII con nombre
“versión” y las extensiones habituales, como por ejemplo: VERSION.XX6

En éste archivo podrá figurar cualquier comentario que se estime oportuno; entre
ellos podrán figurar títulos de los capítulos costes indirectos, beneficio industrial,
resumen de la obra, etc.

La primera línea de éste archivo contendrá la palabra “VERSION XX”.

Anexo 3: FIEBDC, Formato de Intercambio Estándar / 702


Conceptos avanzados de mediciones y presupuestos
Presupuesto por mediciones y por cantidades

Medios auxiliares. costes indirectos. doble rendimiento

Decimales y Redondeos

**********************************

Presupuesto por mediciones y por cantidades


Las mediciones de una obra se realizan sobre las unidades de obra (partidas),
conceptos generalmente descompuestos. El sumatorio de las cantidades obtenidas al
multiplicar el coste de los conceptos descompuestos por sus mediciones
correspondientes, determina lo que denominaremos presupuesto o presupuesto por
mediciones.

La medición de un concepto descompuesto, por el rendimiento de cada concepto


integrante de su descomposición, define las cantidades (recursos, acopios, ...) de ese
concepto simple (sin descomponer) o concepto auxiliar (concepto descompuesto e
integrante de descomposición). Si la cantidad de los medios auxiliares la
repercutimos a su vez a los conceptos de su descomposición, y así sucesivamente,
llegaremos a tener cantidades sólo en los conceptos simples -los que no tiene
descomposición-.

El sumatorio de los valores obtenidos al multiplicar las cantidades de conceptos


simples por sus precios correspondientes, determina lo que denominaremos
presupuesto por cantidades.

En el presupuesto por cantidades también deben estar incluidas las cantidades


proporcionales de medios auxiliares y costes indirectos, pues de otro modo, no
cuadraría el presupuesto.

Si no existiera redondeo en la formación de los precios descompuestos y en el cálculo


de presupuestos, ambos presupuestos deberían coincidir, pero en la realidad hay una
desviación que depende del número de decimales con el que se trabaje para

Conceptos avanzados de mediciones y presupuestos / 703


redondear.

Medios auxiliares. costes indirectos. doble rendimiento.


Costes indirectos

Definimos los costes indirectos como costes necesarios para la ejecución material de
una obra que no son imputables a unidades de obra determinadas. El porcentaje de
costes indirectos es único para fase de obra, pero puede cambiar del proyecto a
cualquiera de las certificaciones. Se define en ventana parámetros generales.

M edios auxiliares

Definimos los medios auxiliares como costes directos de pequeña cuantía para una
unidad de obra determinada y se incluyen en su descomposición en forma de
porcentaje para posibilitar su actualización. El porcentaje de medios auxiliares es
único para cada concepto que se descompone.

Si una partida realmente esta descompuesta en 20 materiales o productos y su


descomposición sólo contempla los 5 más importantes, la descomposición real del
concepto se haría como cinco conceptos, más uno (que englobaría los 15 elementos
restantes) y sería un porcentaje del importe de los otros 5. Puede haber varios grupos
de simples modificados cada uno por un porcentaje de medios auxiliares distintos.

Rendimiento

Definimos el rendimiento de una línea de descomposición, como el valor obtenido de


multiplicar la cantidad necesaria del concepto correspondiente a dicha línea por un
factor dependiente del tipo de descomposición.

El factor de rendimiento tiene el siguiente significado según el tipo del concepto a


que se aplique:

DESCOMPUESTO RENDIMIENTO FACTOR

Especialidad N° de personas Tiempo

Maquinaria N° de unidades Tiempo

(descompuesto)

Maquinaria (producto) Porcentaje Período amortizado

amortizado

Materiales Cantidad Pérdidas o roturas

Partidas de obra Medición Factor de medición

Capítulos N° de unidades Porcentaje

realizado

Precio

Definiremos precio de una partida de obra descompuesta, al sumatorio de los valores

Otros Anexos / 704


obtenidos al multiplicar los precios de los conceptos que intervienen en la
descomposición por el factor y el rendimiento, más el porcentaje de medios auxiliares
de la partida, aplicado al sumatorio anterior.

Coste

Definiremos el coste o coste total de una partida de obra, al precio o coste directo de
dicha partida, MÁS el porcentaje de costes indirectos aplicado ese coste directo.

Según la Ley de Contratos del Estado: "Se considerarán costes indirectos: los gastos
[...] Todos estos gastos, excepto aquellos que luzcan en el presupuesto valorados en
unidades de obra o en partidas alzadas, se cifrarán en un porcentaje de los costes
directos, igual para todas las unidades de obra [...]"

Cada obra tendrá un valor único de costes indirectos como porcentaje de costes
directos y aplicado al coste directo total de cada unidad de obra de la forma en que se
define a continuación.

Decimales y Redondeos
Para que los cálculos internos, haciendo una selección de conceptos, tenga la misma
precisión que el presupuesto acumulado de padres a hijos, y también con el fin de
que las mismas cifras con la misma precisión o decimales, produzca el mismo
presupuesto en cualquier otro programa, se deben establecer los decimales para cada
tipo de dato (mediciones, importes, precios, etc.)

El número de decimales que se puede configurar en la ventana Parámetros


generales, afecta a los decimales de visualización en la ventana principal, de
mediciones, etc. pero los cálculos internos se realizan siempre con toda la precisión
posible (todos los decimales que se pueden almacenar en el tipo de datos
correspondiente).

En informes, el número de decimales es el que se desee imprimir en cada valor y


cada campo, pero los cálculos se realizan igualmente con toda la precisión posible.
Por ejemplo:

Al realizar la división 1.234/34 e imprimir el resultado con 12 decimales:


36,294117647059 y la última cifra ‘9’ es un redondeo de los decimales posteriores (si
realiza la división con la calculadora de Windows, verá la cifra 36,2941176470588
23529411764705882). Pero esta representación no afecta a la precisión: si lo
imprimimos con un decimal saldrá 36,3 y multiplicando por 2 e imprimiendo con dos
decimales dará 72,59 cuando parece que debería dar 72,60

El número de decimales más interesante habitualmente, para la moneda que


utilicemos y el ámbito de la construcción, se asigna a unas variables que se pueden
usar en informes. Para ver los nombres de variables de todos los valores generales
del archivo actualmente en uso, podemos utilizar el informe de ejemplo (ejecab.xjs)
que accede a todos los datos que se graban en la cabecera del archivo.

En el informe ejecab.xjs, se accede al Código y Resumen de todas las entradas que


tengan contenido en la tabla CAB. Además que indican si el archivo está calculado, el
ámbito actual, la fase y moneda seleccionada, las búsquedas programadas, las
variables definidas para informes, etc. tenemos unas variables con los valores de
decimales en el presupuesto:

Conceptos avanzados de mediciones y presupuestos / 705


FUNCIÓN DECIMALES

deci Importes (importes)

decu Unidades (costes directos e indirectos)

decp Precios (costes directos)

decc Cantidades (capítulo/capítulo)

decm Mediciones (capítulo/unidad)

decr Rendimientos (elemento/elemento)

decd Dimensiones (mediciones desglosadas)

decs Subtotales (mediciones desglosadas)

Recuerde que un valor -1 significa sin límite de decimales (se opera con todos los
posibles), no hay decimales ocultos, esto quiere decir que si en pantalla se ven
precios con 2 decimales y al cambiar de divisa, el factor por el que dividimos tiene 3,
después de la división se redondeará a 2 decimales y el resultado se pone en
pantalla.

Como ejemplo, a cada uno de los siguientes valores se le aplicará el redondeo que se
indica, siendo (en nomenclatura propuesta para el FIEBDC):

DM U - Decimales del número de partes iguales de las mediciones desglosadas, y por


extensión de rendimiento y factor de subcapítulos en capítulos.

DM D - Decimales de las dimensiones de las mediciones desglosadas.

DUR - Decimales del rendimiento y factor de unidades en capítulos, y por extensión


del total de mediciones desglosadas

DER - Decimales del rendimiento y factor de elementales en elementales


compuestos

DES - Decimales del importe resultante de multiplicar rendimientos de elementales


por precio del elemental

DE - Decimales del precio de elementales, por extensión de los costes directos y


costes indirectos de las unidades.

DU - Decimales del precio de unidades (coste total = costes directos + costes


indirectos).

DC - Decimales del precio de capítulos, por extensión del rendimientos * precios de


sub-capítulos y rendimientos * precio de unidades

Otros Anexos / 706


NOMBRE NOMBRE FUNCIÓN
CONCEPTO DESCRIPCIÓN
fiebdc Menfis REDONDEO
CAPÍTULO/
CAPÍTULO
DMU CF Factor -1 Sin límite de decimales
Rendimiento
DMU CR decc Cantidad de cada capítulo
(Cantidad)
Cantidad en el capítulo inferior,
DMU CM Medición = CF*CR decc por el rendimiento (si está
definido)
Importe total = Precio del
DC CS Subtotal = CP*CM deci capítulo multiplicado por su
cantidad
CAPÍTULO
Precio = å US + å Presupuestos, Capítulos,
DC CP deci
CS Subcapítulos
CAPÍTULO/UNIDAD
Factor aplicado a la Medición de
partidas. Añade información
DUR UF Factor -1
sobre dificultad, pérdida de
tiempo, roturas, imprevistos...
Rendimiento Medición que puede ser
DUR UR decm
(Medición) desglosada
Producto del Factor (si existe)
DUR UM Medición = UF*UR decm
por la Medición
Producto del precio
DC US Subtotal = UP*UM deci (descompuesto o no) por la
Medición
UNIDAD
Si existe en parámetros
generales definido un
Coste indirecto =
DE UI decp coeficiente de coste indirectos,
EP*Coef.C.I.
el Producto de él por el coste
directo
Coste (precio más costes
DU UP Precio = EP+UI decu
indirectos)
ELEMENTO/
ELEMENTO
Factor aplicado a elementos con
DER EF Factor -1
o sin descomposición
Cantidad del recurso o elemento
DER ER Rendimiento decr en la unidad de medida en que
se mide UR
Producto del Factor (si existe)
DER EM Medición = EF*ER decr
por el rendimiento

Producto del Precio


DES ES Subtotal = EP*EM decp
(descompuesto o no) por la

Conceptos avanzados de mediciones y presupuestos / 707


Medición
ELEMENTO
Precio del elemento
Coste directo =
DE EP decp directamente o como suma de
simple o åES
una descomposición
MEDICIONES
DESGLOSADAS
Núm. de unidades iguales, sin
DMU MU Nº Unidades -1
límite de decimales
DMD MD Dimensiones decd Largo, Ancho y Alto
Producto de las Unidades (MU)
por todas las Dimensiones (MD)
DUR MS Subtotal decs que no sean nulas; o bien el
cálculo explícito de una
expresión o constante

Otros Anexos / 708


Preguntas frecuentes
En esta parte de la ayuda respondemos a preguntas frecuentes que nos realizan los
usuarios. Además como usuario, usted puede ver en nuestra página Web, más
consultas realizadas por usuarios de Menfis.

ÍNDICE
¿Cómo se instalan y desinstalan los permisos (licencia)?

¿Porqué mi ventana principal, botones, menús... tienen una apariencia distinta

que otros de la misma versión?

¿Por qué no puedo escribir en el campo de entrada de la ventana de textos,

carpetas, ...?

¿Porqué al teclear un código de concepto no se distingue entre mayúsculas y

minúsculas?

¿Porqué aparece el error “Archivo de sólo lectura” al trasladar?

¿Como se puede cambiar el título del archivo o base de datos?

¿Qué debo hacer para recuperar una carpeta que he borrado sin querer?

¿Por qué al imprimir, veo el preliminar y salen una lista de datos en una

determinada hoja, pero al salir por impresora no están exactamente en el mismo

sitio de la página?

¿Cómo se cambia el código de un concepto?

¿Porqué sólo se copian líneas en blanco y sin descendientes, al trasladar

conceptos seleccionados desde la ventana principal (1), a la ventana paralela (2)?

¿Qué hago si el archivo de base de datos no funciona correctamente o tiene un

funcionamiento extraño?

P reguntas frecuentes / 709


¿Cómo se realiza una certificación?

¿Porqué al borrar el valor de una dimensión en la ventana de mediciones, cambio

de línea y me vuelve a aparecer?

¿Cómo imprimo un sólo capítulo?

¿Cómo imprimir los precios simples de un presupuesto?

¿Cómo añado mis firmas en los informes que utilizo?

¿Podría crear una base de precios personalizada?

¿Cómo se ajusta el importe de una partida o el proyecto entero?

¿Porqué al importar un archivo .BC3 o convertir uno de Menfis5, si tenía capítulos

y partidas con el mismo código, me desaparecen las partidas?

¿Cómo importo archivos de FIEBDC3?

¿Dónde puedo encontrar en Internet, información sobre la construcción?

¿Porqué al trasladar partidas, el rendimiento de algunos simple y medios

auxiliares no me cambia en el destino, aunque en Modos Traslada tengo Prioridad

origen?

*******************************

A continuación se muestra una lista de las preguntas más frecuentemente realizadas


por los usuarios a nuestro soporte técnico, recopilación de las que se responden en la
guía paso a paso del programa. Además de mejorar la documentación sobre estos temas,
hemos dado una respuesta sencilla a las preguntas. Puede solventar algunas dudas o
lagunas leyendo este tema. Para una introducción a los conceptos más básicos, vea el
tema Conceptos básicos.

¿Cómo se instalan y desinstalan los permisos (licencia)?

Para instalar normalmente, basta ejecutar el programa instalar.exe del CD-ROM o


pulsar la opción de instalación que se muestra en la ventana del programa del CD.
Después de la instalación y desde el botón Instala / Desinstala permisos que hay en la
ventana Herramientas > Opciones... se pedirá la clave de licencia del programa, con el
que se realizará el registro e instalación de permisos del programa.

Para devolver los permisos a Internet después de tener la aplicación instalada en el


disco duro (por ejemplo para devolver el paquete a su distribuidor o hacer una
actualización del programa, o bien para instalarlo en una máquina distinta), pulse el
botón Instala / Desinstala permisos que hay en la ventana Herramientas > Opciones...

¿Porqué mi ventana principal, botones, menús... tienen una apariencia distinta que
otros de la misma versión?

Hay un modo del programa llamado visualizador, que pone el programa en un formato de
interfaz simplificado, y no tiene opciones de edición de la base de datos. Puede
cambiarlo en la ventana de Opciones.

¿Por qué no puedo escribir en el campo de entrada de la ventana de textos, carpetas,

Otros Anexos / 710


...?

Cuando el conmutador Edición de la ventana principal de un archivo no está activado,


no se puede escribir en ninguna ventana con información del archivo, ni se puede
chequear, ni trasladarle información. Estos campos tienen un color oscuro de fondo, que
los identifica como no editables, en ese caso.

El color de “no editable” se puede configurar en Herramientas > Opciones... > Letras y
colores

¿Porqué aparece el error “Archivo de sólo lectura” al trasladar?

Sucede lo mismo que en el caso anterior

¿Porqué al teclear un código de concepto no se distingue entre mayúsculas y


minúsculas?

La sintaxis de códigos en SQL no distingue entre mayúsculas y minúsculas. Una posible


solución para un cambio de código de, digamos, MO23 a mo23 (si ya existe el primero, al
teclear el segundo aparecerá en mayúsculas como si fuese el mismo) es cambiar el
código, por ejemplo a MO23- y luego a mo23. Esto funciona porque el anterior no
existirá.

¿Como se puede cambiar el título del archivo o base de datos?

Sitúe el concepto raíz (.) en la lista de conceptos de la ventana principal haciendo clic
en Padres mientras está viendo el primer nivel de capítulos. También puede hacerlo
definiendo en la línea de Comandos una máscara de búsqueda sin tipo (todos) y sin
código (todos)

Una vez que tenga el concepto raíz en la lista puede modificar su descripción, puede
definir textos, términos, gráficos, etc. unidos a él —igual que en cualquier otro concepto
— con la única limitación de que no puede cambiar su código.

Otra posibilidad más es desde Proyecto > Ventana Parámetros generales > Proyecto, que
muestra los datos de resumen y texto del concepto raíz.

¿Qué debo hacer para recuperar una carpeta que he borrado sin querer?

Basta con teclear el código de nuevo en el mismo sitio, ya que estando en el árbol de
conceptos, los borrados sólo se “descuelgan”, no desaparecen del archivo de base de
datos a menos que apareciera en varios sitios, y hayamos seleccionado la opción
Eliminar.

En caso de haberla borrado en modo lista de conceptos, sí que ha desaparecido


totalmente, con toda su información asociada.

¿Por qué al imprimir, veo el preliminar y salen una lista de datos en una
determinada hoja, pero al salir por impresora no están exactamente en el mismo
sitio de la página?

La representación en pantalla del preliminar en papel, es 100% WYSYWYG (lo que se ve


en pantalla es exactamente lo que se obtiene en impresora), pero SÓLO cuando se
utiliza el zoom al 100%

Debido a pequeños redondeos (sobre todo según el grado de zoom de reducción que se

P reguntas frecuentes / 711


haga y los tipos de letra utilizados), un párrafo que parecía no caber en cierta hoja por
una sola línea, al salir por impresora, realmente cabe, y desplaza las posteriores
haciendo que su situación en las páginas no sea exacta. Sucede muy raramente y
siempre se puede comprobar con el zoom al 100%.

¿Cómo se cambia el código de un concepto?

Cuando cambia el campo Código de un concepto, y tenemos en la ventana principal una


vista jerárquica, el programa entiende que quiere utilizar otro concepto distinto (nuevo
o ya existente en el archivo) en el punto actual de la estructura donde lo ha cambiado.

Sin embargo, si cambia el código de un concepto mientras consulta una lista de


conceptos mediante una búsqueda; se modificará el código de dicho concepto en todos
los lugares del archivo donde aparece.

Para modificar una serie de conceptos que cumplen una máscara —por ejemplo, hacer
que todos los E00???1* se llamen E01???1b*—, utilice Concepto > Concepto actual >
Cambia código...

¿Porqué sólo se copian líneas en blanco y sin descendientes, al trasladar conceptos


seleccionados desde la ventana principal (1), a la ventana paralela (2)?

En Herramientas > Modos Traslada... (común a las dos ventanas principales), debe estar
activada la casilla Traslada conceptos.

¿Qué hago si el archivo de base de datos no funciona correctamente o tiene un


funcionamiento extraño?

Ejecute la función Herramientas > Repara base de datos... si ha ocurrido algún fallo
grave como un corte de luz, un fallo del disco duro, etc. Si aparecen errores que no se
corrigen o no es posible realizar la reparación, todavía queda la posibilidad de utilizar
Herramientas > Compacta base de datos... que al pasarla a un archivo nuevo, tiene aún
más posibilidades de solucionar un problema grave.

Sobre mediciones y presupuestos


¿Cómo se realiza una certificación?

Hay una sola forma de certificar, con las características de que: es por hitos
(mensuales, quincenales o con el periodo irregular que queramos) y definidas por un
periodo Fecha inicial-Fecha final, y siempre con mediciones a origen -aunque la
introducción de datos de cada fase se puede hacer a origen o parcial-.

Para certificar utilizamos una fase por cada certificación, y ponemos en ella las marcas
de finalización de unidad de obra (cuando corresponda) y mediciones a origen. Para
controlar fechas tenemos las fechas de inicio y fin de las fases. Todas las
certificaciones se mantienen en un solo archivo, junto al proyecto inicial (que es la
primera fase, de defecto).

¿Porqué al borrar el valor de una dimensión en la ventana de mediciones, cambio de


línea y me vuelve a aparecer?

Al tener el conmutador de Modo repite activado, cualquier campo vacío toma el valor de
la línea superior. Si desactiva el modo, o no deja el campo vacío, no sucederá esto.

Otros Anexos / 712


¿Cómo imprimo un sólo capítulo?

Casi todos los informes tienen definido un parámetro para indicar el código del concepto
raíz para el informe. Basta cambiar el de defecto (el concepto raíz, punto ".") por el que
queramos. No admite máscaras.

¿Cómo imprimir los precios simples de un presupuesto?

Menfis ofrece varios informes en las 3 primeras carpetas, con los informes más
estándar, referidos a recursos, cuadros de precios y precios sin descomposición.
Podemos elegir el más conveniente en formato.

¿Cómo añado mis firmas en los informes que utilizo?

En los informes, utilice las variables firma1c, 2c y 3c y firma1p, 2p y 3p. El contenido de


las mismas se define en la ventana parámetros generales.

¿Podría crear una base de precios personalizada?

Se puede crear, en un archivo nuevo o a en una base de datos que ya tengamos en


Menfis, trasladando desde cualquier otra base de datos estándar que esté situada en el
archivo paralelo.

Otra forma es teclear el código que ya conocemos, en la parte que nos interese de
nuestra base, Menfis busca en el archivo paralelo, y si existe el código, cogerá los datos
de esa base estándar.

¿Cómo se ajusta el importe de una partida o el proyecto entero?

Mediante la ventana Ajusta presupuesto podemos ajustar cualquier conjunto de


conceptos simples del proyecto, o los precios y/o cantidades de toda la estructura
proporcionalmente. Para ajustar una sola descomposición tenemos otra herramienta
distinta en la ventana Ajusta precio.

¿Porqué al importar un archivo .BC3 o convertir uno de M enfis5, si tenía capítulos y


partidas con el mismo código, me desaparecen las partidas?

La especificación FIEBDC-3 vigente no distingue códigos entre capítulos y partidas,


aunque tradicionalmente se hayan nombrado los códigos de capítulo terminándolos con
una almohadilla "#". Es decir, el código 01# es el mismo que el 01 y si existen ambos,
dependiendo del orden en que el programa lea los datos de concepto y relación,
eliminará unos u otros.

La forma de resolverlo es no dejar códigos ambiguos en el archivo de origen.

¿Cómo importo archivos de FIEBDC3?

En todos los casos de importación, crear un archivo nuevo, y pulsar la opción


correspondiente Herramientas > menú Importa... > Importa formato. Seleccionar a
continuación el archivo o los archivos que queramos importar y seguir los pasos de cada
diálogo.

En versiones anteriores de Menfis, se importaban formatos muy antiguos que ya no se


soportan. Si tiene interés en uno en particular, consulte a su distribuidor, ya que
mediante una rutina en JavaScript se pueden hacer importaciones personalizadas de

P reguntas frecuentes / 713


cualquier formato.

¿Dónde puedo encontrar en Internet, información sobre la construcción?

Recomendamos unos cuantos sitios con bastante contenido:

Confederación nacional de la construcción, que a su vez tiene enlaces a sitios web de


ministerios, C.C.A.A. y otras entidades importantes.

¿Por qué al trasladar partidas, el rendimiento de algunos simples y medios


auxiliares no me cambia en el destino, aunque en modos Traslada tengo prioridad
origen?

En Modos Traslada la Prioridad origen afecta sólo a los conceptos seleccionados (partidas
o unidades de obra en este caso) y no a su descomposición, porque esto podría provocar
que cambiaran los precios o datos de otras partidas donde aparezca esa descomposición.

Otros Anexos / 714


Versiones
Esta ayuda en línea es la documentación más técnica y actualizada que puede
encontrar para este programa. No obstante es posible que alguna de las últimas sub-
versiones (marcadas por el tercer dígito de la versión) no lleve documentada alguna de
las últimas correcciones o novedades.

Por ello, siempre debe consultar el archivo LEAME.HTM del directorio de instalación que
contiene las novedades de última hora no incluidas en este archivo de ayuda.

Aquí tiene la lista de las versiones principales. Las novedades de cada una de ellas se
encuentran detalladas en su propio tema:

Menfis 8.0 16/06/10

Menfis 7.0 28/03/05

Menfis 6.5 25/02/04

Menfis 6.4 16/06/03

Menfis 6.3 23/04/03

Menfis 6.2 16/04/02

Menfis 6.1 16/10/01

Menfis 5.5 23/02/00

Menfis 5.2 22/06/99

Menfis 5.1 03/11/98

Menfis 5.0 02/11/97

Los cambios importantes en versiones anteriores a la 5.0, estan documentados en la


ayuda en línea de cualquier versión 5. Carecen de interés en relación con Menfis 8, ya
que se trata de versiones de 16 bits o primeras versiones diseñadas para 32 bits.

Versiones / 715
Instalación y configuración
Administradores: Detalles de instalación
A continuación se detallan notas avanzadas interesantes para la instalación de una
versión registrada. Para información sobre la propia instalación, vea el tema
Instalación y solución de problemas.

Instalación de permisos
Los permisos se pueden instalar a través de disquete,por Internet o llamando por
teléfono a Professional Software, S.A. para que nos den la cadena de permisos para el
funcionamiento del programa.

Desde la ventana de Opciones, en la pestaña licencia tenemos acceso pinchando el


botón Gestión de Licencias (instalar / desinstalar) a las ventanas de instalación /
desinstalación de los permisos de Menfis 8.

Instalación de permisos
Instalación remota de permisos

La instalación remota se puede realizar de dos maneras distintas.

Activación desde Internet

Para activar su licencia a través de Internet, deberá introducir el número de


licencia que acompaña a su CD-ROM de Menfis en el campo Introduzca su
número de licencia

A continuación deberá incluir en el campo Introduzca su Clave de Acceso la


clave que también acompaña al CD-ROM de Menfis.

Activación manual

A continuación deberá incluir en el campo Introduzca su Clave de Acceso la


clave que también acompaña al CD-ROM de Menfis.

Instalación y configuración / 717


En el campo Introduzca su Clave de Acceso deberá introducir la clave de
acceso que tiene para esta licencia.

Por último deberá introducir la cadena de caracteres que le indicarán por


teléfono en el campo Introduzca su código de activación

Desinstalación de permisos
En esta ventana tiene dos opciones que le permiten desinstalar los permisos.

Con la Transferencia de permisos a internet podemos transferir los permisos al


servidor de ProSoft, para posteriormente descargarlos en otro ordenador o en el
mismo. Nos da acceso a una ventana en la que existen dos campos que deben estar
rellenos con su información correspondiente: Se transferirá el Número de licencia,
el cual contendrá el número de su licencia de Menfis. En caso de que este campo
esté vació, deberá incluir el código de licencia que acompaña a su CD-ROM de
Menfis 8.

Además se le pedirá su clave del programa en el campo Introduzca su Clave de


Acceso. A continuación podrá pulsar el botón siguiente para desinstalar la licencia.

Este mismo procedimiento se podrá realizar por teléfono desde la segunda opción
Desinstalación telefónica de permisos a través de la que se deberá poner en
contacto con Professional Software, S.A. donde se le dará una clave que deberá
escribir en el campo Código de confirmación para tener desinstalada la licencia.

En cualquiera de los dos casos anteriores, para volver a instalar la licencia


deberemos ejecutar la opción de instalación de permisos.

Modificación de permisos.
Desde esta opción se pueden modificar los permisos del programa, como por ejemplo,
aumentar el número de usuarios que pueden tener acceso simultáneo al programa
o el módulo de éste.

En el campo Introduzca su Número de Licencia aparecerá normalmente éste, en


caso contrario, deberá introducirlo escribiendo el código de licencia que acompaña al
CD-ROM de Menfis 8.

En el campo Introduzca su código de activación deberá introducir el código que por


teléfono le han dado los técnicos de Menfis de Professional Software, S.A.

Configuración externa del programa


Durante la instalación se crea un grupo de programas que contiene accesos directos
a los archivos más importantes de la aplicación. El grupo incluye un icono que
representa al programa, también guarda la unidad de disco y el directorio donde está
instalado, así como diversos parámetros de configuración.

También se asocian las extensiones de los archivos que maneja el programa, con el
programa ejecutable de extensión .EXE, situado en el directorio de instalación, de
forma que al hacer doble clic en el Explorador de Windows sobre cualquier archivo con
extensión de la aplicación, de cualquier directorio o unidad, se ejecuta la aplicación,

Otros Anexos / 718


pasando a la ventana principal y cargando el archivo seleccionado.

Parámetros de ejecución del programa


El comando de inicio del programa asociado al icono de acceso directo, tiene el
siguiente formato:

directorio_público\nombre_programa.exe [dir=directorio_privado] [len=


archivo_lenguaje] [per=directorio_permisos_remotos] [nombre_archivo]

La entrada opcional "dir=" es la que se utiliza en las instalaciones para red local.

Otro parámetro opcional es el lenguaje utilizado al abrirse, que se asigna con "len=",
aunque también está definido por defecto en el archivo .INI y se puede cambiar en la
ventana de Opciones

La entrada per= permite tener una instalación servidora con sus permisos, y una o
varias servidoras, que funcionen en modo local pero se comparten los permisos
como si fuesen clientes, es decir, tenemos la instalación completa en nuestro
equipo (de esta forma funciona más rápido que a través de la red), pero utilizamos
sólo unos permisos (los que están instalados en el equipo al que hacemos referencia
con el parámetro per=). Cualquier instalación normal permite esta configuración,
pero eso si: si no tenemos una licencia con múltiples usuarios de red, no podremos
estar trabajando con las diversas instalaciones SIMULTÁNEAMENTE.

Por último, y detrás de cualquier parámetro, la entrada nombre_archivo especifica


el archivo de base de datos que se abre automáticamente al abrirse el programa. Por
defecto se abre el último utilizado.

Archivo .INI de valores por defecto


La configuración inicial de muchos parámetros del programa está definida en este
archivo, que en general, el usuario no debe modificar nunca, ya que cualquier error
en el mismo provocaría que los estados iniciales se perdieran (aunque el programa
es capaz de crear otro con unos valores de defecto, por ejemplo si se ha borrado o
estropeado, debido a un fallo en disco).

El archivo .INI tiene varias entradas configurables. El archivo también se puede


manipular manualmente como texto, pero puede ser peligroso si no se conocen bien
las entradas y sus posibles valores. Por ejemplo:

actual_barra_defecto=secuencia de identificadores de botones

Muestra los botones de defecto seleccionados en el orden en que están puestos,


en la barra de iconos. La aparición, está supeditada a los permisos de la licencia
programa.

actual_barra=secuencia de identificadores de botones

Representa la configuración actual.

Recuerde que los nombres de archivos, en las entradas del INI donde se utilicen,
TIENEN que llevar el nombre completo con la extensión correspondiente (no es
opcional).

Instalación y configuración / 719


Instalación y solución de problemas

Protocolo Actualizado el 17/06/10


Este documento técnico está destinado a consultores del programa, y a usuarios
avanzados (como administradores del sistema o de instalación del programa).

¡Lea antes estas precauciones y restricciones! ->

Ver un resumen de los posibles tipos de instalación

¿Qué quiere hacer?


Instalar clientes para una instalación en red

Actualizar una versión existente, con una licencia nueva

Desinstalar la licencia de una versión existente

Desinstalar el programa y licencia de una versión existente

Cambiar el programa ya instalado, de un equipo a otro

Problemas y soluciones:
Después de instalar, al abrir el programa, está en modo Evaluación

He perdido la instalación en disco duro

La protección se ha transferido, pero aparece el rótulo "versión incorrecta" o "versión

desinstalada"

No sé si se han transferido correctamente los permisos

Los clientes no pueden acceder a la instalación servidora

El acceso a la B.D. en red es exageradamente lento

******************************

Precauciones y restricciones
Antes de realizar cualquier instalación / desinstalación de permisos:

Comprobar que no se está ejecutando ni en local, ni en red, el programa


involucrado contra la protección. Si no se está seguro por ser usuarios muy
lejanos físicamente, el administrador debe desconectar a los usuarios conectados
al servidor o bloquear el acceso al directorio de programa.

Una vez instalado el programa no puede cambiarlo de unidad física de disco, pero
sí puede cambiar el nombre del directorio en el que se encuentra instalado, o
cambiar el directorio de lugar DENTRO del mismo disco físico (cambiar de sitio el
directorio significa moverlo, no copiarlo).

Otros Anexos / 720


Si después de intentar solucionar un problema con la instalación de la licencia,
parece no haber cambiado nada, reinicie la máquina (en algunos servidores, por el
sistema de caché que tienen, el sistema puede quedar en un estado inestable).

Instalar clientes para una instalación en red.


Los clientes de red deben tener ciertos permisos sobre el directorio de instalación
del servidor.

Los permisos deben ser de control total, es decir, permisos de lectura y ejecución por
supuesto, así como de escritura, creación, modificación y borrado de archivos. Es
IMPORTANTE que se tenga activado el "reemplazo de permisos en subdirectorios"
para que estos permisos tengan efecto sobre el subdirectorio oculto que contiene la
licencia del programa y todos los demás directorios del programa.

Si posee una licencia monousuario no podrá volver a instalar, a no ser que


desinstale e instale de nuevo. Si posee una licencia multiusuario tendrá que
realizar una instalación cliente (seleccionando esta opción durante el proceso de
instalación) en cada una de las estaciones de trabajo que se vayan a utilizar para
trabajar con la aplicación.

La instalación del cliente no hay que registrarla, ya que toma los permisos del
servidor. Tenga en cuenta que debe especificar los directorios de la red utilizando
las mismas letras de unidad o nombres de máquina que se utilizarán normalmente
para acceder a al programa.

La instalación en cada estación de trabajo crea un grupo de programas con los


iconos para utilizar el programa.

Actualizar una versión existente, con una licencia nueva


Si no vamos a mantener la licencia (porque sean muy distintas, o porque tenga
distintos módulos) y también vamos a cambiar al programa, no tiene sentido hacer
la instalación sobre el directorio de una versión antigua, por lo que el procedimiento
es el de instalar una licencia nueva, teniendo la precaución de seleccionar otro
directorio distinto al que se sugiere en el programa de instalación (que siempre será
el de la última instalación).

Si vamos a desinstalar el programa de la versión antigua, debe recordar desinstalar


los permisos, sino perderá la licencia antigua que le puede servir para
actualizaciones.

Desinstalar la licencia de una versión existente


Esto se hace, por ejemplo, en el caso de que la licencia original tuviese un límite de
ejecuciones o de fecha, y queramos sustituirla por una permanente. O bien, hemos
comprado más módulos del programa, y queremos quitar la anterior licencia.

La forma de proceder es similar a la de la instalación.

Si elegimos desinstalación por internet los permisos se transferirán al servidor de


Professional Software, donde permanecerán hasta que desee instalar la licencia
de nuevo.

Si elige desinstalación manual de licencia, debe llamar a nuestro departamento

Instalación y configuración / 721


de soporte donde le proporcionaran los datos necesarios para la desinstalación.

Desinstalar el programa y licencia de una versión existente


1. Desde el Panel de control de Windows, seleccione la opción "Agregar o quitar
programas"

2. Desde el menú de inicio seleccionando la opción Menfis 8 Desinstalar.

Cambiar el programa ya instalado, de un equipo a otro


Hay que distinguir entre 2 casos:

1. desinstalar permisos del ordenador donde esté el programa

2. instalarlos en el otro como si se tratase de una instalación original

Problemas y soluciones
Después de instalar, al abrir el programa, está en modo Evaluación
¿Cómo se puede comprobar esto? con el rótulo que se muestra en la pestaña
Licencia de la ventana Opciones.

Si no se ha dado ningún aviso de problemas al comenzar el programa de instalación,


el error se ha producido justo al terminar la instalación y transferir la protección.

PRIMERO proceda asegurándose de que la licencia no se haya quedado a la mitad de


la instalación. Esto se puede comprobar mirando en la carpeta de instalación que no
haya ninguna carpeta llamada Menfis.582 o ninguna librería Menfis.dll. Si existe
alguno de estos archivos es que la instalación de la licencia ya había comenzado. La
carpeta Menfis.582 puede no estar visible a priori por lo que habría que ir a las
opciones de carpeta y decirle que muestre todas las carpetas ocultas.

Solución:

Si se muestra un código de error, diríjase a su distribuidor por teléfono o e-mail y


proporciónele esos detalles.

He perdido la instalación en disco duro


Si accidentalmente ha borrado el programa o ha desaparecido la información del
disco duro (por ejemplo, al formatearlo o por un fallo en el disco), ha perdido la
licencia de uso que había instalado con él. El programa podrá instalarlo siempre con
el CD-ROM, pero sin la licencia estará en modo evaluación.

Solución:

Debe ponerse en contacto con el distribuidor del programa para que le dé la solución
más adecuada a su caso.

La protección se ha transferido, pero aparece el rótulo "versión incorrecta" o


"versión desinstalada"
Compruebe que el archivo .DLL de la protección con el nombre de la aplicación se ha
copiado en el disco duro (es decir, si existe en el directorio del programa, y en caso
de existir, si es igual al del disquete en tamaño y fecha.

Otros Anexos / 722


Solución:

Si no lo es, cópielo con el explorador, ya que se debe haber producido un error en


Windows, al copiarlo.

No sé si se han transferido correctamente los permisos


Los permisos pueden haberse transferido correctamente, el programa funcionar
bien, y en un momento dado, sin motivo aparente, da mensajes de licencia
incorrecta. Esto puede suceder porque haciendo limpieza del disco hayamos borrado
directorios ocultos del programa, a que los hayamos movido por accidente con el
explorador, a la acción de un virus, que ha modificado los archivos, a la de un
antivirus que ha eliminado los archivos confundiéndolos, o alguna otra causa
anómala.

Solución:

Compruebe que existe en el directorio de instalación del programa, en el disco duro,


el directorio oculto (para ello debemos asegurarnos de que el explorador de Windows
muestra los archivos ocultos), que compone el núcleo de la licencia. Como
características peculiares:

tiene como nombre <nombre_programa>.582

contiene 3 ó más archivos y un subdirectorio también oculto

ese subdirectorio a su vez contiene otro archivo

Los archivos ocultos <nombre_programa>.003 y sucesivos representan el nº de


conexiones en red que tiene la licencia. El que tiene la misma fecha que la
instalación de permisos, es el núm. máximo (es decir, con 4 usuarios de red
simultáneos aparece <nombre>.004 y con cada conexión de red, aparece uno nuevo
(001, 002...), que no se cambia de fecha cada vez que se accede, sino que mantiene
la de la primera vez que se conectó.

Los clientes no pueden acceder a la instalación de red


Tengo una instalación con varios clientes de red. Si arranco varias instancias en el
servidor, funciona, pero al arrancar desde los clientes, se muestra el mensaje de
que "se ha superado el nº máximo de usuarios":

Suele ser un problema de permiso de acceso al directorio del programa o al


directorio de licencia CopyControl. Si la aplicación la ha instalado en el servidor un
usuario que no tenía todos los permisos de red, por ejemplo, al acceder otro usuario
con unos permisos incompatibles, se puede producir el error.

Solución:

Comprobar el usuario de creación de la carpeta compartida de aplicación y de


licencia (directorio oculto), así como que todos los usuarios que van a acceder como
clientes, tienen permisos "full control" de acceso al directorio del programa.

El acceso a la B.D. en red es exageradamente lento


Abrir un archivo en la red, con los permisos en red, puede tardar hasta 4 minutos en
una máquina relativamente potente (instantáneo si se abre el equipo local).

Instalación y configuración / 723


Solución:

Normalmente es culpa de un programa antivirus o firewall que está penalizando el


acceso de red, y no se trata sólo de lentitud en abrir la base de datos, sino en
acceder a archivos de cualquier tipo (gráficos, Excel, Word...). Hay versiones con
problemas que aunque se desactiven pueden producir un retraso en abrir un
archivo de B.D. de hasta 2-4 minutos. La solución es desinstalar el antivirus.

Tipos de archivos que maneja el programa


La aplicación utiliza un único tipo de archivo para mantener toda la información de una
base de datos. Este tipo de archivo tiene una extensión particular, y su estructura
interna sólo es comprensible para la aplicación.

Los archivos externos que genera la aplicación tienen su extensión, a veces obligada y
otras simplemente para reconocer su procedencia. Cuando desde alguna ventana
queremos leer algún archivo externo, la aplicación nos presentará los que tengan la
extensión correspondiente a la ventana que los solicita, o del directorio en el que se
almacena ese tipo de archivos, aunque en la mayoría de los casos, podemos introducir
archivos que no tengan la extensión de defecto o grabarlos sin ella.

A continuación se describe cada tipo de archivo con su extensión por defecto, el formato
interno que utiliza y qué programa de la aplicación lo importa o exporta.

Los archivos de base de datos de la aplicación, se pueden abrir, cerrar, crear,

renombrar y borrar con las opciones del menú Archivo.


.men
Inicialmente aparece el directorio público, pero podemos crear nuestros

propios directorios de trabajo para almacenarlos.

Archivos que mantiene cada una de las configuraciones de impresora


.cni
definidas en la ventana informes y procedimientos

Los archivos TRASGO.DOC, DIANA.DOC, etc. y algunos otros archivos de


.doc documentación de uso que se distribuyen como complemento a esta ayuda en

línea

Archivos en formato HTML de página web. Además de haber alguno que sirva
.htm como documentación, el programa permite cualquier salida de datos a este

formato, mediante un informe que imprima las claves

Hay varios archivos de texto estándar, con esta extensión:

.log - CHEQUEO.LOG creado por la opción Herramientas > Chequea Proyecto

- INCLUYE.LOG creado por Herramientas > Menú importa > Importa FIEBDC...

Otros Anexos / 724


- INDIZA.LOG creado por la opción Proyecto > Búsqueda en lenguaje natural >

Indiza de la ventana Tesauro

Cuando se ha realizado alguno de los chequeos, y para otras operaciones

internas con archivos, se crea el archivo en el directorio \TEMPORAL.

.prg En el directorio \INFORMES de la aplicación, se encuentran todos los

programas de informes y herramientas juntos, en cambio en la aplicación

aparecen clasificados en carpetas y subcarpetas. Esta organización de

mantiene en el archivo CARPETAS.PRG, aunque todos los archivos .xjs estén

juntos.

.rtf Formato de texto rico al que se permite exportar cualquier informe

.txt Texto estándar. Hay varios sitios donde se utilizan archivos de este tipo:

- Archivos de informes en formato Ms-Excel.

- Archivos de texto estándar con informes dirigidos hacia archivo con la opción

Proyecto > ventana informes y procedimientos > TXT Archivo

- Archivos resultado de la exportación o para la importación con los botones

Importa... y Exporta... de la ventana Texto e incluye el texto de la ventana.

.xjs Programas de informes y procedimientos en lenguaje JavaScript (archivos de

texto plano ASCII editables, por ejemplo, con el bloc de notas de Windows),

utilizados en el ventana informes y procedimientos

Accesibles desde la versión con módulo Básico, se encuentran en el

subdirectorio \INFORMES, y contiene una amplia gama de informes y

herramientas distintas (decenas de informes con variaciones mediante

parámetros).

Además de éstos tipos, se distribuyen otros archivos con diversas extensiones, pero
clasificados por directorios. Estos tipos de archivos no se deben mover de su directorio
original.

Corresponde con el directorio de trabajo, y cualquier diálogo de abrir,

guardar, copiar o cualquier operación que tenga que ver directamente

con el archivo de base de datos, se abrirá en este subdirectorio.


DATOS
En él se guardan los archivos de trabajo (ya que será el directorio más

cómodo para ello), y accesos directos a todos los directorios que visitemos,

para tener una forma rápida de llegar a los que utilizamos

Instalación y configuración / 725


habitualmente.

Contiene todos los archivos que sirven de ejemplos de base de datos, así

EJEMPLOS como los archivos relacionados: hojas de Ms-Excel .XLS, documentación

en Ms-Word .DOC, etc.

Aunque se dan como ejemplo, en distintos directorios, archivos .DXF, .

BMP, .PCX, puede acoger cualquiera de los formatos gráficos soportados.


GRÁFICOS
En sus subdirectorios puede haber paquetes de gráficos de ejemplo,

bibliotecas de logotipos de empresas...

Hay un subdirectorio por cada grupo de informes independiente en

contenido. Estos contienen los archivos con el código del programa de los
INFORMES
informes. Si no hay otro grupo de informes que los estándar, se

encuentran directamente bajo este directorio.

Contiene archivos con plantillas para diversas funciones del programa:

conversiones de archivos, estados de defecto, scripts, configuraciones de


MACROS opciones en ventanas con muchas opciones, etc. Cada archivo de distinto

tipo tiene distinta extensión, y así desde cada función del programa se

permite elegir sólo entre los modelos adecuados.

Archivos de gráficos, registros .LOG de importación, exportación y

chequeo y cualquier archivo que pueda ser sobrescrito por la misma


TEMPORAL
función que los generó para que el tamaño de este directorio no crezca de

forma desmedida.

Archivos de texto estándar que contienen los parámetros usados por el

menú Ventanas. Están almacenadas en unos subdirectorios que llevan

por nombre la resolución de tarjeta gráfica para la cual están creadas las
VENTANAS configuraciones (1280x1024, 1024x768, 800x600 y la estándar 640x480).

El directorio que corresponde con su configuración es detectado

automáticamente, y sólo se pueden manejar las ventanas de ese

directorio.

Todos los archivos de que hemos denominado de "texto estándar" o "ASCII", son legibles
mediante cualquier editor o procesador de textos.

Otros Anexos / 726


La empresa

HORARIOS DE ATENCIÓN AL CLIENTE

HORARIO NORMAL

de Lunes a Jueves de 8:30h a 14:00h y de 16:00h a 19:00h

Viernes de 8:00h a 15:00h

HORARIO DE VERANO

Meses de Julio y Agosto

de Lunes a Viernes de 8:00h a 15:00h

La empresa / 727
DONDE ENCONTRARNOS

Professional Software S.A. (Central de M adrid)

Maria Tubau, 4 - 3ª Planta. Edif. Auge III

28050 - Madrid

Tfno. Centralita: 91 358 75 80 - Fax: 91 358 95 60

Tfno. Menfis: 91 358 75 85 - 902 11 75 69

Tfno. Comercial: 902 35 88 88

Professional Software S.A. (Delegación Barcelona)

Castillejos, 226

08013 - Barcelona

Tfno.: 93 439 82 22 - Fax: 93 439 95 26

Professional Software S.A. (Delegación A Coruña)

Fernando Pérez de Traba, 13

15670 Culleredo (A Coruña)

Tfno. y fax 981 91 30 44

www.prosoft.es

P rofessional Softw are S.A. / 728

También podría gustarte